Unity3d 序列目标点的移动
在研究寻路算法(如 A 寻路算法)时,由于 A 寻路是基于网格的,序列点的移动便成为了我的研究方向。经过一番探索,目前有以下几个可行的方向:
可选方案
A. DoTween
DoTween 提供了一个 sequence 动画组合功能,理论上可以满足序列目标点移动的需求。不过,DoTween 主要用于组合动画,用它来实现简单的序列点移动,有“杀鸡用牛刀”之感,因此我果断放弃了这个方案。
B. iTween
iTween 也有类似的功能,但不完全符合要求。下面解释一下为什么说它不满足需求:使用 iTween 插件进行曲线插值时(基于 3 个点,运算较为复杂),会得出红色的轨迹线;而黄色线是调试显示的 4 点直线辅助线。如果直接使用插件得到的运行轨迹,并不符合我的预期。不过,iTween 的使用代码比较简单,很容易理解。
实际上,在研究上篇基于时间线移动的内容时,我深入分析学习了 iTween 的源代码。其本质就是事件线插值动画,并没有什么高深的原理。如果深入理解其原理,完全可以对 iTween 进行扩展以实现序列目标点移动的功能。
C. 自己实现
这是本文的重点。我在网上搜索了很久,终于找到了一段老外写的代码,代码非常简单。实际的代码原型就是这么简洁,结合之前提到的 MoveTowards 函数的优点,实现起来并不复杂。
总结
经过一番尝试,序列目标点移动的功能终于实现了,但目前仍存在一些瑕疵,后续还需要进一步优化。