(unity)游戏中摇杆:控制角色移动

2023-10-31

摇杆其实挺简单的,只需要一个需要控制的角色target和控制其移动的方向传出去,调用角色的move函数就可以了:
我是传出去使用的角度,基于摄像机当前前方向=摇杆上方向和摇杆当前到中心的向量之间的角度旋转:有点绕:如图所示
在这里插入图片描述
在这里插入图片描述

//isDown是一个bool变量,记录是否正在使用摇杆 
if (Input.GetMouseButtonDown(0))
{
	//这个是我自定义摇杆的触碰范围:是一个rect矩形,返回的是否在这个屏幕范围触碰的屏幕
   isDown = App.Instance.chickInRect(mouPos);
}
if (Input.GetMouseButtonUp(0))
{
   isDown = false;
}

 moveDir = Vector2.zero;
 angle = 0;
 //得到ui在屏幕上面的坐标---当前摇杆底图中心pos
 Vector2 img_ygbg_pos = RectTransformUtility.WorldToScreenPoint(App.Instance.uiCamera, img_ygbg.position);
  //得到ui在屏幕上面的坐标--当前摇摇动的图片中心pos
 Vector2 img_ygzx_pos = RectTransformUtility.WorldToScreenPoint(App.Instance.uiCamera, img_ygzx.position);
 Vector2 imgpos = Vector2.zero;
 float dis = 0;
 if (isDown)
 {
	if (Input.GetMouseButton(0) || Input.GetMouseButtonDown(0))
	{
	    Debug.Log("这是遥感范围");
	    Vector2 pos = Input.mousePosition;
	    dis = Vector2.Distance(pos, img_ygbg_pos);
	    //限制摇杆最远距离rac=55
	    dis = Mathf.Clamp(dis, 0, rac);
	    moveDir = pos - img_ygbg_pos;
	    imgpos = img_yzbg_2dpos + moveDir.normalized * dis;
	    img_ygzx.localPosition = imgpos;
	}
}
//如果没有点击,坐标进行重合,相当于没有移动值
else
{
    img_ygzx.localPosition = img_ygbg.localPosition;
}
//角色速度重置
App.Instance.mine.nowSpeed = 0;
if (moveDir != Vector2.zero)
{
	Vector2 forwlordPos = new Vector2(0, 1);
	angle = Vector2.Angle(forwlordPos.normalized, imgpos.normalized);
	//这个是为了利用叉乘判断角度为负还是为正,以为点乘只有0-180度。。。。
	float angledir = Vector3.Cross(new Vector3(forwlordPos.x, 0, forwlordPos.y), new Vector3(moveDir.x, 0, moveDir.y)).y;
	angle *= angledir < 0 ? -1 : 1;
	if (moveDir.sqrMagnitude > 0.1f)
	{
	   App.Instance.mine.nowSpeed = dis * 0.11f;
	   //Debug.Log( + "-----");
	
	   //将角度和方向传出去
	   EventManager.DispatchEvent<float, Vector2>(EventName.Instance.MOVETOROLE, angle, moveDir);
	}
                
}


角色里面的旋转角色:
private void Rota(float angle)
{
	//当前摄像机
	 Transform cameraTra = Camera.main.transform;
	 Vector3 cameraForld = new Vector3(cameraTra.forward.x, 0, cameraTra.forward.z);
	 //按照角色up轴进行旋转
	 Quaternion rota = Quaternion.AngleAxis(angle, transform.up);
	 cameraForld = (rota * cameraForld).normalized;
	 transform.rotation = Quaternion.LookRotation(cameraForld, transform.up);
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(unity)游戏中摇杆:控制角色移动 的相关文章

随机推荐

  • 想在网上兼职做什么比较好,分享五个网上兼的副业项目帮你拓展视野

    许多工薪族都想要运用下班了的空余时间根据网上做兼职 却却找不到人正确引导一条正确的方向 并没有渠道信息内容 那他们如何找到自已的做兼职呢 小编觉得应当在网络上多查看的相关资料 多探寻方式 选择适合自己的做兼职 随后用心去感受干 慢慢地 便会
  • 前缀和求解k倍区间问题

    题目描述 给定一个长度为 N的数列 A1 A2 AN 如果其中一段连续的子序列Ai Ai 1 Aj之和是 K 的倍数 我们就称这个区间 i j 是 K倍区间 你能求出数列中总共有多少个 K倍区间吗 输入格式 第一行包含两个整数 N和 K 以
  • 完全详解权限系统设计方案

    1 为什么需要权限管理 日常工作中权限的问题时时刻刻伴随着我们 程序员新入职一家公司需要找人开通各种权限 比如网络连接的权限 编码下载提交的权限 监控平台登录的权限 运营平台查数据的权限等等 在很多时候我们会觉得这么多繁杂的申请给工作带来不
  • IT项目管理个人作业7(操作案例)

    完成作业1 3的要求 使用 project 或其他工具 作业1 假设项目管理 需求定义的工作都由项目经理做 其他工作则由其他项目成员做 WBS条目 小时数 单位小时成本 美元 子层总和 美元 WBS第二层的总和 美元 占总和的 1 项目管理
  • grid网格布局实现图表框架(vue)

    需求 需要实现一个如图所示的界面 实现 用grid布局来实现 div class inner div div div
  • 岁月划过生命线(从阿里到微店)

    从阿里到微店 标签 程序人生 在 lt 2 5年 从0到阿里 gt 中提到过 当时面阿里云OS时预期的是进入虚拟机团队 结果后来被分到了高通平台参考设计团队 因此在阿里期间心情一直是比较低落的 写这篇博客主要是基于以下几个原因 前段时间跟大
  • 利用Matlab进行图像分割和边缘检测

    本文章包含以下内容 1 灰度阀值分割 1 单阈值分割图像 先将一幅彩色图像转换为灰度图像 显示其直方图 参考直方图中灰度的分布 尝试确定阈值 应反复调节阈值的大小 直至二值化的效果最为满意为止 给图像加上零均值的高斯噪声重复上述过程 注意阈
  • QT+VS 在项目中新建子窗体ui,生成h文件、cpp文件、moc文件

    1 绘制子窗体 在项目中新建子窗体ui文件 命名为testUi ui 2 新建上述窗体文件对应的ui类 建议将ui类与子窗体设置成相同的名字 testUi h testUi cpp 此时testUi还是一个只包含默认构造函数和析构函数的空类
  • gdal_makedata波段计算

    import os import gdal makeData import numpy as np from osgeo import gdal import cv2 as cv from PIL import Image from PIL
  • Android Studio:如何使用网格布局将整个界面等比分为三行三列

    刚开始接触android开发 还在摸索基础控件 老师说解决了一个问题就要记录下来以防以后遗忘 所以这里小小记录一下碰到的问题 课本上的一道题目 怎么将界面等比分为三行三列 显示一个红色的 十 字效果 如下图所示 采用线性布局非常简单 直接
  • Java从入门到入坟系列学习路线目录索引(持续更新中~~~)

    Java学习路线目录索引 一 Java基础 二 Java数据库 Mysql 三 Java设计模式 四 SSM等主流框架 五 MybatisPlus 六 SpringBoot 七 SpringCloud 微服务 八 Redis 九 Docke
  • 西门子S7-200SMART 通信组态

    这里主要说一下关于S7 200SMART通信组态的问题 S7 200 SMART 可实现 PLC 编程设备 工控机 电脑 和 HMI 之间的多种通信方式 以太网 实现工控机 普通PC和PLC之间通信 程序下载上载等 实现PLC和HMI之间通
  • 【核磁共振成像】磁共振成像基础

    目录 一 振幅 二 频率 三 相位 四 脉冲 1 脉冲定义 2 选择性脉冲和非选择性脉冲 3 带宽 五 MRI的基本硬件构成 1 主磁体 1 主磁体是产生磁场的装置 2 MRI按主磁场强度分类 3 优缺点 4 高度均匀的磁场 2 梯度系统
  • MVC开发模式

    总结 1 JSTL存在的目的和EL表达式一样为了减少JSP页面的脚本代码也就是java代码 JSTL的引入方式 1 导入jar包 1 jstl jar standard jar 2 在jsp页面导入包
  • MySQL8 提示1055 错误代码

    问题产生场景 今天使用Python3 PyMYSQL SQLAlchemy 执行分组查询提示如下错误信息 sqlalchemy exc OperationalError pymysql err OperationalError 1055 E
  • stm32+VL53L0x激光测距实验,keil5测试工程已经上传CSDN

    stm32 VL53L0x激光测距实验 连接方式 SCL PA3 SDA PA2 VCC 3 3V GND GND GPIO1 浮空 XSHUT PA5 这个其实是使能 0关闭 1启动 给大家看看我买的模块样子 串口助手上显示的内容 测量到
  • 解决div出现横向滚动条,背景色没铺满问题

    问题描述 如图 div等块级元素默认宽度为100 当页面渲染完后其宽度已经固定 这时候如果文字超出其宽度 如调用api后显示的结果 我们如果希望其出现滚动条 这时超过原宽度的部分背景可能跟文字背景不一样 如图 1 初始情况 2 点击菜单后出
  • 等保windows server安全策略三权分立设置

    三权的理解 配置 授权 审计 三员的理解 系统管理员 安全保密管理员 安全审计员 三员之三权 废除超级管理员 三员是三角色并非三人 安全保密管理员与审计员必须非同一个人 控制面板 计算机管理 本地用户和组 安全用户配置 审计用户配置
  • 群晖系统ftp服务器,群晖对接云服务器ftp

    群晖对接云服务器ftp 内容精选 换一换 用户可以在MRS Manager界面上配置监控指标数据对接参数 使集群内各监控指标数据通过FTP或SFTP协议保存到指定的FTP服务器 与第三方系统进行对接 FTP协议未加密数据可能存在安全风险 建
  • (unity)游戏中摇杆:控制角色移动

    摇杆其实挺简单的 只需要一个需要控制的角色target和控制其移动的方向传出去 调用角色的move函数就可以了 我是传出去使用的角度 基于摄像机当前前方向 摇杆上方向和摇杆当前到中心的向量之间的角度旋转 有点绕 如图所示 isDown是一个