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

猜你喜欢

转载自blog.csdn.net/u012869793/article/details/125074419