Unity简单利用屏幕坐标转换实现鼠标控制物体移动

在我初学Unity的时候在利用鼠标控制物体移动的时候搞了很长一段时间,对于新手来说,屏幕坐标系转换确实有一点的麻烦,在此写下我的第一篇博客,也算证明自己进军IT界的决心。


首先我们需要思考的是如何使一个物体产生移动,这里我改变它的坐标来达到目的,这里我们先声明一个vector3 Point = vector3.zero;作为物体当前的值

这样可以使第一帧不移动,实现同步的效果

当然我们第一部就是获取到鼠标的点击事件


 if (Input.GetMouseButton(0))

    然后我们将鼠标在屏幕中的坐标转换乘世界坐标

      这里我们需要用一个Vector3来接收

      vector3  nowPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);

      现在我们获得了鼠标的坐标并且已经转换成了世界坐标

     如果Point发生了改变就要改变飞机的坐标Point

    if(Point != Vector3.zero)

      当鼠标坐标发生改变时,鼠标上一帧坐标和当前坐标产生向量

      vector3 offest = nowPoint - Point;

     这时我们就可以改变物体的坐标了:比如物体是cube,我们将这个向量加给物体的坐标,这样物体移动的距离和方向就会和鼠标一致了

    Point = nowPoint;其实这是我们应该做的第一句话,但是我们现在还没有获得当前坐标所以需要写在之后

    这时你会发现已经可以做到鼠标控制移动了,但是会有一个问题,那就是因为现在是默认记住当前的,当你松开手鼠标时再次点击时和之前的坐标跨度巨大,会时物体瞬移   所以我们需要在 这里写上鼠标脱离屏幕之后将Point设置为o,这样第一帧不会进入发生向量的判定条件(Point!=vector3.zero)内,当第二帧才会运行,就避免了因为鼠标脱离之后再次点击就会脱离的情况了。这样的方法也可以实现控制旋转等等情况。

第一次写,表达可能会很差,总之就是希望一些初学者有这方面问题希望能起到帮助,谢谢阅读!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值