《物体到达目标位置移动旋转方法之一》

才开始学unity的时候,只会简单地用transform.Translate对物体进行移动,用transform.Rotate对物体进行旋转,但是这仅仅限于在物体比较少的情况下,如果物体很多,我们不可能针对每一个物体来对它进行transform. Translate以及transform.Rotate.这样是很耗损工作量的。如果物体很多的话,我们可以先对其中的一个物体进行平移以及旋转,其余的物体也只是初始Transform以及目标Transform不同(Transform中已经包括了position以及rotation),动作的速度不同,那么,我们可以把这些不同的属性设置为公有变量,这样在控制不同的物体时,我们只需要修改unity引擎的属性栏中的这些变量就可以了,不需要再跑到代码中去修改,这样就方便了许多。

举个栗子:假如我们要控制不同的物体进行平移旋转,我们想让它们以相应的移动速度移动到相应的位置,以相应的旋转速度旋转到相应的旋转角度。那么我们可知,不同的物体相应的移动速度算是一个变量,相应的旋转速度算是一个变量,起始Transform算是一个变量,目标Transform算是一个变量,我们知道了应该有哪些变量,就应该先拟好变量名,因为我们打算直接在unity引擎中进行修改,所以加上public,代码如下:

public Transform moveFrom;

public Transform moveTo;

public float speedMove = 20.0f;

public float speedRotate = 0.0f;

代码中的moveFrom 是物体的初始位置,指的是物体原来的Transform(当然包括positionrotation),moveTo是物体的目标位置,是物体后来的Transform,我们要控制物体的position变化,并且还伴有相应的速度时,代码如下:

moveFrom.position = Vector3.MoveTowards(moveFrom.position, moveTo.position, Time.deltaTime * speedMove);

这时物体就从原来的位置到达了目标位置,我们还要求物体有相应的旋转,并且也伴有速度(速度是用来制造一个动作的过程,速度越快,整个动作的完成时间就越快)则代码:

moveFrom.localRotation=Quaternion.RotateTowards(moveFrom.localRotation,moveTo.localRotation,Time.deltaTime *speedRotate);

你也可以不用上速度这个变量,直接写成:

moveFrom.position = moveTo.position;

moveFrom.localRotation = moveTo.localRotation;但是如果这样的话就没有过程的展现,显得不真实,当然,具体情况具体对待。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值