本帖最后由 威恩IG 于 2015-3-19 12:49 编辑
今天到家吃完饭,突然想敲代码……不知道怎么会有这种想法. 打开了尘封了多年的项目,那是在学校跟几个朋友一起合作写的MOBA类型的游戏,想起了当年的热血,也准备在工作之余重新开启这个项目,这些都是题外话,项目中有刀光残影的效果,是使用的一个叫《PocketRPGTrails》的插件,效果还是不错的,不过插件说明和案例都是用的animation组件,那么animator下怎么使用呢? unity残影拖尾插件PocketRPGTrails 下载地址:http://pan.baidu.com/s/1i3kq5V3
首先,插件中提供的AnimationController脚本就不能使用了,需要我们自己写一个Trail脚本。 代码如下: [code=csharp]using UnityEngine;
using System.Collections;
public class Trail : MonoBehaviour {
public WeaponTrail TrailObj;//武器柄的节点
private float t = 0f;
private float tempT = 0f;
private float animationIncrement = 0.003f;
void Start () {}
void LateUpdate()
{
t = Mathf.Clamp(Time.deltaTime, 0, 0.066f);
if (t > 0)
{
while (tempT < t)
{
tempT += animationIncrement;
if (TrailObj.time > 0)
{
TrailObj.Itterate(Time.time - t + tempT);
}
else
{
TrailObj.ClearTrail();
}
}
tempT -= t;
if (TrailObj.time > 0)
{
TrailObj.UpdateTrail(Time.time, t);
}
}
}
}[/code]
把这个脚本add到你角色的节点上,如下图: 再找到你模型挂武器的武器节点,比如说右手拿武器,那就找到右手这个骨骼的节点,反正最好是武器把手的位置。 如下图: 注意:一定一定是骨骼的节点,或者自己在他的节点下新建一个节点。
武器把手的节点add上插件提供的“WeaponTrail”脚本。 除了WeaponTrail脚本外,节点上必须包含的组件如下图: 注意:记得注意shader是否选择的是Paiticles/Additive!并且图片选择的是Assets/PocketRPG Trails/Prefabs/Effects/Attacks/weaponTrail02,不是不能改,而是以我们程序员的审美,可能会自己改的很丑,或者说是我的审美很差。。。直接用插件提供的效果就已经很不错~所以最好不要改拉~
最后把这个节点拖到我们Trail脚本的TrailObj属性上,如下图: 加上自己的Animator,运行并播放攻击动画看一下效果~ 注意:适当的调整一下武器把手的节点上的“WeaponTrail”脚本的属性,比如把Height调整成真正角色武器的长度、Time刀光残影残留时间等等的属性自己调整一下,调的好看一点~
看上面的gif会发现角色在移动和武器收回的过程中都带有拖尾效果,虽然挺炫,但是不符合常理,我们怎么样只有攻击过程中有残影,并且收回武器的时候没有残影呢?那还要改一下我们的Trail脚本,并且添加动画事件。先说Trail脚本。 在Start()函数中先把残影关掉 增加开启残影函数(用于动画关键帧调用) 增加关闭残影函数(用于动画关键帧调用)
Trail更改后如下: [code=csharp]using UnityEngine;
using System.Collections;
public class Trail : MonoBehaviour {
public WeaponTrail TrailObj;
private float t = 0f;
private float tempT = 0f;
private float animationIncrement = 0.003f;
void Start ()
{
//先把残影关掉
TrailObj.SetTime(0.0f, 0.0f, 1.0f);
}
public void TrailStart()
{
//设置拖尾时长
TrailObj.SetTime(2.0f, 0.0f, 1.0f);
//开始进行拖尾
TrailObj.StartTrail(0.5f, 0.4f);
}
public void TrailStop()
{
//清除拖尾
TrailObj.ClearTrail();
}
void LateUpdate()
{
t = Mathf.Clamp(Time.deltaTime, 0, 0.066f);
if (t > 0)
{
while (tempT < t)
{
tempT += animationIncrement;
if (TrailObj.time > 0)
{
TrailObj.Itterate(Time.time - t + tempT);
}
else
{
TrailObj.ClearTrail();
}
}
tempT -= t;
if (TrailObj.time > 0)
{
TrailObj.UpdateTrail(Time.time, t);
}
}
}
}[/code]
然后找到攻击动画,找到自己觉得应该出现残影的那一帧,添加一个事件。 如我的攻击动画第一帧,添加上一个事件, 如何添加动画关键帧:怎么预览动画肯定知道吧,点击Events下的按钮,就是在当前预览的动画暂停的那一帧上添加一个事件。
弹出来的窗口Object选择 Trail脚本,Function写上"TrailStart"。这样就是当动画播放到这一帧的时候,会自动调用这个函数开启残影。如下图: 那么结束就应该是找到结束的那一帧添加一个事件,调用TrailStop函数。这里就不写、也不放图了。 一些细节就看自己慢慢调了~
我们的MOBA里面的效果: 有任何问题直接留言或者微博或者qq都可以~及时解答大家问题~
|