Lerp函数与自动normalized
在编写unity代码物体旋转的一个部分遇到了一个奇怪的问题:对tansform.forward使用lerp函数竟然不起作用?
如果moveDir是(0,0,0),在游戏中角色不会旋转视角回原点(这里当时脑抽了,Vector3.zero也不是原点啊)。但奇怪的是,为什么即使Slerp函数(基本与lerp一至)返回了一个不同于transform.forward的值,角色还是不会旋转呢?经过一顿操作,终于找到了原因。
使用Debug.Log发现控制台中一直打印true,也就是说在moveDir等于0时,lerp会返回一个在normalized后依旧等于transform.forward的值。众所周知,lerp(a, b, t)会返回一个在(a,b)之间的某点t的值。而normalized会使一个长度不是1的向量保持方向不变,而长度回到1,至此,问题已经解决了。
假设transform.forward向量长这样
那么与Vector.zero作为lerp的参数得到的结果是这样
那么这个图中标记会红色的向量进行normalized之后会变回原来的transform.forward!原因在于与Vector3.zero进行lerp的结果只会改变长度,而不改变方向。所以代码中返回的值虽然不与transform.forward一样,但因为transform.forward会自己normalized自己,最后导致transform.forward没有变化。
ps:如果在lerp(a,Vector3.zero,t)中设置的t大于1,transform.forward会被设为Vector3.zero从而导致自己normalized自己找不到正确的方向而报错。
标签:Vector3,函数,lerp,Lerp,transform,zero,normalized,forward From: https://www.cnblogs.com/kekekuli/p/17799980.html