刀光拖尾功能的改良


年终终于有空,刀光拖尾是我很早就想回顾的一个课题,项目中多采用插件实现,很少有机会去研究。

在游戏中刀光拖尾有2种做法,一种是直接做死,用Shader做遮罩去控制滑动效果,这种做法

通常用于非写实类项目,unity自己的3d game kit demo对这一块已经做的比较全,可以直接参考。

第二种是程序化生成,本文主要就这种做法进行讲解。

对于程序化生成的拖尾,通常重新实现一遍TrailRenderer,自行解决折线问题、扩展插值逻辑等。

如果是直接模仿TrailRenderer去做,最终会有一股浓重的PS2游戏的感觉,多边形效果明显,

我最早的刀光拖尾脚本也是这个基于思路去实现。

资源商店有一个很老的插件X-WeaponTrail,拖尾非常顺滑,研究了下发现作者首先根据距离去算

采样点,然后基于采样点做一遍CatmulRom的插值,还是比较细致的。后来的改良版本基于这个插件

的思路去实现。

来对比下改良前后的效果(上图-旧的刀光拖尾,下图-新的刀光拖尾):

(上图的重面问题缩短刀光范围可以解决)

X-WeaponTrail的做法是每帧记录最新的刀光点位置,拿到刀光点List通过CatmulRom插值,

并通过距离信息,等距的生成Mesh。每个拖尾面片的顶点位置等信息并没有进行记录,而是

实时计算的,这就导致刀光点发生变化之后,插值就会发生变化,就会有奇怪的滚动效果。

当把拖尾拉长后,这个问题较为明显:

原版插件也有这个问题,不过一般刀光速度很快,所以也还好。

最终参考该插件完成了刀光拖尾功能的改良,代码Gitee地址:https://gitee.com/Hont/weapon-trail-fx