版权声明:转载请注明出处!不注明也无所谓,嘿嘿。 https://blog.csdn.net/qq_15020543/article/details/82811070
我们平时开发游戏,有时会想要实现武器拖影特效,就像这样。
这个双刀流的小老头已经很全面的诠释了什么是武器拖尾。其实Unity自带了拖尾组件
但他有很大的局限性,当目标仅进行移动,转弯的时候,它是可以胜任的,但是,当物体本身发生旋转的时候,他还是会像之前那样,只是单纯的跟随transform.position进行更新。下面是个例子。
****************************************************************************************************************************************
我们让物体自转(绕Z轴)
但是我们会发现,虽然物体一直在自转,但是他的拖尾并没有跟着转,这并不是我们想要的,所以PASS。
如果真有小伙伴需要这种简单的拖尾,那就去百度学习一下这个组件,很简单。
****************************************************************************************************************************************
下面是我们今天的主角。Pocket RPG Weapon Trails。下面给出下载链接。
扫描二维码关注公众号,回复:
3417239 查看本文章
https://pan.baidu.com/s/1CnvzvFlQH2-X6u6yL1N2eA
首先介绍一下Pocket RPG Weapon Trails这个插件,它的原理是每帧计算Mesh Renderer来更精确让特效贴合武器。
我们先来看一下他的文档。
大致是这个意思。
先看WeaponTrail
其中有几个重要的方法,在开始说这几个方法之前,先说明一下里面几个重要变量。
1.desiredTime:表示想要让拖尾持续的时间(与time密切相关)
2.time:表示拖尾从开始出现到完全消失所用的时间(总是在向desiredTime靠近)
3.timeTransitionSpeed:与time成正比,与fadeTime(在几秒内渐隐)成反比
在每帧的更新里有这样一段代码
下面是方法:
1.StartTrail激活拖尾特效,并将一直处于激活状态。如果timeToTweenTo不等于desirdTime(默认值为2),time将一直向desiredTime靠近,靠近速度取决于timeTransitionSpeed。
2.SetTime设置拖尾特效的总持续时间。(一般的我们使用这个方法控制拖尾特效的持续时间,所以我们一般把第二个参数设为0,但是还是看个人需求来),它将以tweenSpeed的速度靠近_deriredTime的值。
3.去除拖尾特效。
我个人感觉以上第一个和第二个方法可以灵活的选择使用。
然后是实现方法,有两种方法
第一种是不使用AnimatorController
(参考https://blog.csdn.net/akof1314/article/details/37603559)
using UnityEngine;
using System.Collections;
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);
}
}
}
}
第二种使用AnimatorController
(参考http://www.xuanyusong.com/archives/2110)
让我们最后看看效果,这样就实现了武器的拖尾效果。