年终终于有空,刀光拖尾是我很早就想回顾的一个课题,项目中多采用插件实现,很少有机会去研究。
之前也写过一版拖尾,但效果并不好。
在游戏中刀光拖尾有2种做法,一种是直接做死,用Shader做遮罩去控制滑动效果,这种做法
通常用于非写实类项目,unity自己的3d game kit demo对这一块已经做的比较全,可以直接参考。
第二种是程序化生成,本文主要就这种做法进行讲解。
对于程序化生成的拖尾,通常重新实现一遍TrailRenderer,自行解决折线问题、扩展插值逻辑等。
如果是直接模仿TrailRenderer去做,最终会有一股浓重的PS2游戏的感觉,多边形效果明显,
我最早的刀光拖尾脚本也是这个基于思路去实现。
资源商店有一个很老的插件X-WeaponTrail,拖尾非常顺滑,研究了下发现作者首先记录每帧刀光点的位置
存为采样点,然后根据颗粒度参数进行0-1的插值,插值点再通过距离拿到采样点再最终走一遍CatmulRom输出,
还是比较细致的。后来的改良版本基于这个插件的思路去实现。
来对比下改良前后的效果(上图-旧的刀光拖尾,下图-新的刀光拖尾):
(上图的重面问题缩短刀光范围可以解决)
X-WeaponTrail的做法是每帧记录最新的刀光点位置,拿到刀光点List通过CatmulRom插值,
并通过距离信息,等距的生成Mesh。每个拖尾面片的顶点位置等信息并没有进行记录,而是
实时计算的,这就导致刀光点发生变化之后,插值就会发生变化,就会有奇怪的滚动效果。
当把拖尾拉长后,刀光滚动的问题就比较明显:
原版插件也有这个问题,不过一般刀光速度很快,所以也还好。
最终参考该插件完成了刀光拖尾功能的改良,代码Gitee地址:https://gitee.com/Hont/weapon-trail-fx
标签:光点,插件,改良,插值,刀光,拖尾 From: https://www.cnblogs.com/hont/p/17058510.html