前言
我们平时开发游戏,有时会想要实现武器拖尾特效,就像这样。
其实Unity自带了拖尾组件,但他有很大的局限性,当目标仅进行移动,转弯的时候,它是可以胜任的,但是,当物体本身发生旋转的时候,他还是会像之前那样,只是单纯的跟随transform.position进行更新。这里就需要介绍今天推荐的武器拖尾特效插件 —— Pocket RPG Weapon Trails。它的原理是每帧计算Mesh Renderer来更精确让特效贴合武器。
素材下载
Asset Store地址: https://www.assetstore.unity3d.com/en/#!/content/2458
介绍
我们先来看一下他的文档。
这里说几个重要的变量
- desiredTime:表示想要让拖尾持续的时间(与time密切相关)
- time:表示拖尾从开始出现到完全消失所用的时间(总是在向desiredTime靠近)
- timeTransitionSpeed:与time成正比,与fadeTime(在几秒内渐隐)成反比
使用例子
3d的例子有很多,比如:https://blog.csdn.net/akof1314/article/details/37603559。
这里我就举一个2d中的使用例子,在我之前做的项目:【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》,实现小鸟发射的拖尾效果
不添加拖尾的效果
添加拖尾
给小鸟添加一个子对象,命名为 Trail,并为其添加 WeaponTrail.cs脚本、 Mesh Renderer组件,材质为Pocket RPG Trails提供的材质(WeaponTrail),设置好如下图所示:
代码控制拖尾生成
新增 TestMyTrail.cs代码为如下:
public class TestMyTrail : MonoBehaviour { public WeaponTrail myTrail; private float t = 0.033f; private float tempT = 0; private float animationIncrement = 0.003f; void LateUpdate() { t = Mathf.Clamp(Time.deltaTime, 0, 0.066f); if (t > 0) { while (tempT < t) { tempT += animationIncrement; if (myTrail.time > 0) { myTrail.Itterate(Time.time - t + tempT); } else { myTrail.ClearTrail(); } } tempT -= t; if (myTrail.time > 0) { myTrail.UpdateTrail(Time.time, t); } } } }
挂载在小鸟身上
拖尾排序问题
如果你跟我一样,背景和小鸟使用了不同的排序,那么大概率你的拖尾会被遮挡,可以添加sort group组件修改拖尾的排序
效果
修改拖尾高度和存活时间
效果
待机时无拖尾
我们要实现待机时无拖尾,需要更精确的控制拖尾的出现和消失,修改 TestMyTrail.cs 代码为如下,在小鸟发射时调用heroAttack显示拖尾
void Start() { // 默认没有拖尾效果 myTrail.SetTime(0.0f, 0.0f, 1.0f); } //显示拖尾 public void heroAttack() { //设置拖尾时长 myTrail.SetTime( 2.0f, 0.0f, 1.0f); //开始进行拖尾 myTrail.StartTrail( 0.5f, 0.4f); } //隐藏拖尾 public void heroIdle() { //清除拖尾 myTrail.ClearTrail(); } //。。。
效果