平滑追踪
这是我在做摄像机平滑追踪移动人物时发现的
简单、快捷、实用,仅7行代码(TypeScript)
实现原理
摄像机离人物越近,追踪速度越慢;摄像机离人物越远,追踪速度越快。一种距离,对应一种速度。
如果当前速度 ≠ 当前距离对应的速度,则向当前距离对应的速度靠拢
代码解释

k是一个效果常数,
0 < k < 1:摄像机追踪人物,剧烈地来回抖动,且抖动幅度越来越大
k = 1:摄像机追踪人物,来回抖动,且无衰减;
1 < k < 2:随着k值增大,摄像机追踪人物,抖动逐渐消失,摄像机移动速度逐渐减小
k>=2:摄像机追踪人物,完全没有抖动,但摄像机移动速度较小
考虑到抖动程度较小(其实轻微抖动不是什么坏事,反而有独特的效果),并且摄像机移动速度不太慢,此处k取1.7
this.node是摄像机,this.player.node是人物
dx、dy就分别是x轴、y轴上摄像机与人物的距离差
为了实现 “摄像机离人物越近,追踪速度越慢;摄像机离人物越远,追踪速度越快”,就直接用距离代替速度了(这里其实还可以自己设计一个单增函数),即dx、dy表示当前距离对应的速度。
于是第4、5行就是平滑地改变摄像机的速度,向着目标速度的方向
最后两行就是更新位移了
另外,这个算法除了可以用于摄像机追踪人物之外,还可以用于其他物体追踪的例子



看来如果仅仅是跟随的话,这么写就好了。很简洁,受教了