Unity2D中让角色旋转朝向鼠标
实现该功能,你需要关注以下的几个步骤
1.获取角色的世界坐标
2.获取鼠标所在位置的世界坐标
3.获取角色朝向鼠标时候的向量
4.获取上一步骤的向量的反正切的弧度值
5.将弧度值转化为角度
6.将该角度应用于角色
——————————分割线——————————
先从第一和第二步骤说起,获取角色的世界坐标非常简单。如果已经将C#脚本挂接到角色的话,那么只需要使用以下代码,即可获得玩家的世界坐标。
transform.position
然后呢,需要获得鼠标的世界坐标。这个需要用到C#中的Input类中的mousePosition方法获取坐标,但是,这个坐标数据是获得鼠标在屏幕上的坐标,并不是在游戏中的世界坐标,所以需要将它转换为世界坐标,然后使用一个Vector2的对象来储存这个世界坐标。
Vector2 mousePosition=Camera.main.ScreenToWorldPoint(Input.mousePosition)
好了,以上都是铺垫,后续才是关键。我们需要声明一个float类型的变量来获得角色的世界坐标指向鼠标的世界坐标的这个向量与X轴所形成的角度。在这里我们需要使用Mathf类中的Atan2方法来获取该向量的反切弧度值,根据我们的开发需求,该方法需要传入向量的Y坐标和X坐标,它会返回一个弧度值,但这并不是我们最终需求的,所以还需要将它转换为角度。具体这么写。
float Angle= Mathf.Atan2(mousePosition.y - transform.position.y, mousePosition.x -transform.position.x) * Mathf.Rad2Deg;
上面的代码中前面的方法就是将向量转换为与X轴的弧度,那么后面的Mathf.Rad2Deg则会返回一个常数(180/Pi),将弧度乘以这个常数可以将弧度化为角度。
那么接下来呢就可以把这个角度应用到游戏角色啦!
在这里我们需要了解一个名叫Quaternion(四元数)的类,它提供了一个Eluer的方法可以帮助角色进行旋转,但是前提是你需要告诉角色绕哪个坐标轴旋转多少度,所以你需要new一个Vector3的对象来存储这个不同坐标轴的旋转角度,具体你需要这么写。
transform.rotation = Quaternion.Euler(new Vector3(0,0,Angle));
有人会疑问为什么在X轴和Y轴的参数中都是0,因为在Unity2D中,Z轴垂直于2D平面,我们的角色实际上也只是绕Z轴旋转,因此X和Y轴都不需要动它。
最后将这些代码连起来,用一个方法封装起来。取名就叫“DirectionChange”吧
void DiretionChange(){//获取鼠标在游戏中的世界坐标Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);//获取玩家坐标和鼠标的世界坐标形成的向量的角度float Angle= Mathf.Atan2(mousePosition.y - transform.position.y, mousePosition.x transform.position.x) * Mathf.Rad2Deg;//使玩家朝向鼠标方向transform.rotation = Quaternion.Euler(new Vector3(0,0,Angle));
}
将这个方法在Unity的C#脚本中默认的Update方法中调用就可以实现啦!!!
Unity2D中让角色旋转朝向鼠标相关推荐
- (C#)Unity2D中制作角色的相机跟随Camera Follow
前言 关于相机跟随方面,本文介绍两种实现方法. 一种为脚本控制Unity初始的相机,一种为调用Unity中相机插件. 1.需求分析和实现目标 a.2D视角,相机需要始终将玩家放在可见屏幕内. b.相机 ...
- unity人物旋转移动代码_求教,人物控制,视角随鼠标移动,且绕角色旋转。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 小弟是美工,刚接触编脚本没几天,今天试着修改了一下unity3d 自带的视角控制脚本MouseLook.cs 其中第45行是小弟添加的,实现了绕角色旋转的 ...
- UE4在第三人称游戏中添加角色和角色的空闲动画
1.首先可以在Mixamo里选择喜欢的人物,下载fbx文件. 2.打开UE4,创建一个第三人称游戏. 3.在内容浏览器里创建文件,命名"Character". 在Character ...
- Marmoset Toolbag中的角色布光技巧 by Joe”EarthQuake”Wilson
Marmoset Toolbag中的角色布光技巧 by Joe"EarthQuake"Wilson Sagat by Tim "spacemonkey" App ...
- unity2D学习笔记-角色动画
unity2D学习笔记-角色动画 角色移动 动画效果(重点!!!!!) 创建:Animator与Animation 状态转换 跳跃 从fall到idle Hierarchy中创建一个Sprite作为载 ...
- 极验:验证码在黑灰产对抗中的角色和实践
导读:随着互联网技术的发展,网络上的黑灰产对抗也日益激烈.在黑灰产攻防双方你追我赶的动态博弈中,验证码扮演着提高攻击门槛.处置恶意流量.辅助风险判别等重要角色.今天将和大家分享验证码的诞生与发展过程. ...
- Unity2D中实现子弹的弧线轨迹
Unity2D中实现子弹的弧线轨迹 前言 设计思路 代码实现 第一次发blog的感想 前言 大家好!我是第一次写blog的Unity2D初学者,最近在研究射击RPG时看到一些比较酷炫的弧线子弹射击,很 ...
- 怎么实现EDIUS 8中图片的旋转
刚刚接触EDIUS非线性编辑软件吗?觉得很难找到开破点吗?不要着急,新一篇EDIUS 8入门教程又来了.上一次我们讲了如何使用EDIUS 8让所有的图片素材都变成相同大小的,是不是很简单啊,这次我们再 ...
- 3D视角旋转平移鼠标响应制作
OpenGL处理3D视角以及旋转变换的一个关键思路是归一化处理. 归一化处理就是将数据进行单元化,将所有需要显示的数据等比例装在一个1X1X1的立方体里. 然后OpenGL去显示这个立方体,设置视角g ...
最新文章
- 蓝桥杯:算法提高 9-2 文本加密
- multiple problems have occured
- 环境测试明日最后一天 16万次公交车确保市民出行
- JPA(一):十分钟入门 JPA
- Spring boot+Spring Security 4配置整合实例
- 基于位置的知识图谱链接预测
- java cookie secure_Cookie的Secure属性
- .Protobuf,GRpc,Maven项目出现UnsatisfiedDependencyException、ClassNotFoundException、BuilderException等异常
- php 开启memcache,php开启与安装 memcache
- 使用kubernetes 官网工具kubeadm部署kubernetes(使用阿里云镜像)
- 2021-06-27Date时间
- 基于数组的一个简单增删改查
- ApiPost、Postman及并发测试工具Jmeter、PostJson接口测试工具,设置参数传递。
- matlab求一维热传导方程数值解代码,一维热传导方程数值解法及matlab实现
- FPGA数字时钟计数器
- 移动 PC 的数据加密工具包 - 安全分析
- 使用 SAS 宏变量
- 2014福布斯中国富豪榜(名单)
- 外包 (outsourcing) - 劳务派遣 (labor dispatching)
- 1635-超大型 LED 显示屏 ZCMU
热门文章
- timesten java_java怎么联接服务器上的timesten数据库
- 苹果CMSv10明星库数据文件-免采集导入即用
- 如何用html制作标题栏,第一天学习html前端,制作标题栏
- 在Docker中安装Java
- 大数据Spark实战第八集 数仓与数据决策
- java毕业设计校园快递代领系统mybatis+源码+调试部署+系统+数据库+lw
- java判断请求是浏览器发送的还是黑客发送的
- 人均劳动生产率的计算方法_劳动生产率是怎么计算的
- Task1:皮尔森相关系数计算 | 数据模拟
- 图解机器学习第四部分第十四章——K均值聚类算法