Unity让物体跟随鼠标移动
Posted 李公子lm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity让物体跟随鼠标移动相关的知识,希望对你有一定的参考价值。
前言
最近在学习Unity,记录下学习的成果吧。本文最终结果是要实现一个小飞机跟随鼠标移动的效果。看下图片。
向量
在Unity中,每个对象都有自己的位置属性,组件叫做Transform
,通过Transform
可以获取对象的位置属性。在上面的实例中,我们需要获取到鼠标的8实时位置和小飞机的实时位置,接着计算出小飞机到鼠标位置的向量。
那么什么是向量,简单来说,向量就是有大小和方向的量,一般用箭头表示,箭头的方向就是表示向量的方向,箭头的长度就是表示向量的大小。
向量的运算
这里就简单介绍下向量的加法和减法。非常简单,直接拿对应的坐标相减/加即可。
比如有一个坐标a(3,2),坐标b(0,2),求a+b = (3,4),表示到图上就是。
向量的减法也同理,直接相应的坐标相减即可。
向量夹角计算
比如有两个坐标,a(2,2) b(-2,2),如下图所实施。如何计算这两个向量的夹角呢。
在Unity中我们可以用SignedAngle
方法来计算两个向量的夹角。
//计算向量夹角
var angle = Vector3.SignedAngle(face, direction,Vector3.forward);
物体旋转
在2D的项目中,我们要控制物体的旋转,一般是直接调用Rotate
方法来控制Z轴的数值就好。
this.transform.Rotate(0, 0, angle);
其中angle就是旋转角度。angle
为正表示逆时针旋转,为负表示顺时针旋转。
物体移动
在2D图形中,想让物体往前移动,我们可以调用Translate
方法,修改其Y轴坐标即可。然后坐标表示已自己为中心。
transform.Translate(0, 0.02f, 0, Space.Self);
完整代码
结合上面的一些实例,我们差不多可以做出这样的效果了,当然还需要获取鼠标的坐标。
//表示鼠标的屏幕坐标
var mousePosition = Input.mousePosition
//转成世界坐标
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
完整代码如下
void Start()
Application.targetFrameRate = 50;
void Update()
var face = this.transform.up;
//获取鼠标位置
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
mousePosition.z=0;
//获取小飞机位置
Vector3 screenPosition = transform.position;
//计算向量
var direction = mousePosition - screenPosition;
//计算向量夹角
var angle = Vector3.SignedAngle(face, direction, Vector3.forward);
this.transform.Rotate(0, 0, angle);
//小飞机移动
transform.Translate(0, 0.02f, 0, Space.Self);
best wishes from Dragon Boat Festival
以上是关于Unity让物体跟随鼠标移动的主要内容,如果未能解决你的问题,请参考以下文章