irpas技术客

Vector3.Lerp 和 Vector3.SmoothDamp 使用的注意事项_Zoye_cheer51

大大的周 5661

这两天在做相机平滑跟随玩家的功能,之前用的DoTween可以解决很大一部分的问题。但是目标位置如果一直在改变的话,就会有奇怪的眩晕感。所以老大说换着Vector3.Lerp 和 Vector3.SmoothDamp 来解决追赶玩家并保持跟随状态。 一开始用的是Vector3.Lerp,用的时候感觉也还行,但是在相机启动的时候会让人感觉速度很快。而且还有很多需要注意的点,比如里面参数t是传【0,1】之间的。相当于百分比去更新当前的位置 ,那么Vector3.Lerp (a,b,t)需要注意的是a是最开始的位置,不是相机当前的位置。那么在规定的时间里去完成lerp ,t+=1/SmoothTime * Time.deltatime,1/SmoothTime * Time.deltatime 为一帧所需要的步长,相机就会匀速到达目标点。但是由于目标点一直在变化,所以最后展现的有加速减速的感觉。 如果下面的a=transform.position,那么t为一个固定的值0.1f,永远保持10%的位置上。

transform.position = Vector3.Lerp(a, targetPos, 0.1f);

不管咋样,都满足不了我现在的需求。

于是就换一种用Vector3.SmoothDamp 平滑阻尼。

void LateUpdate() { transform.position = Vector3.SmoothDamp(transform.position, target, ref velocity, smoothTime); }

但是这里的smoothTime 并不是我们所要求的时间,参数smoothTime 和最终平滑到目标点的时间实际上是有一个倍数的关系,如果输入的时间为1秒。

m_FinTime = smoothTime * 3.7f;

所以如果你想在1秒内完成平滑,那么smoothTime应该是 1 / 3.7f(这个3.7是粗略算出来的,底层的逻辑我没有仔细研究) 不过搞出来平滑所需要的总时间太短也看着不平滑,特别是启动也会有加速的感觉。这个也是玩家也在用一定的时间运动,所以相对速度不持平,就会有顿感吧。

最后也不知道我的思路是不是一开始就走错了。反正这个启动加速感好像没解决。尴尬– 如果你们有更好的解决相机追赶后跟随的方法,教教我教教我! 参考链接


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Vector3Lerp # #使用的注意事项