威恩IG 发表于 2015-3-19 12:47

[unity3d插件]如何在Animator中使用刀光残影插件”PocketRPGTrails”

本帖最后由 威恩IG 于 2015-3-19 12:49 编辑


[*]本文固定链接: http://www.winig.cc/archives/268转载请注明: 威恩 2015年03月18日 于 威恩IG.CC 发表

今天到家吃完饭,突然想敲代码……不知道怎么会有这种想法.打开了尘封了多年的项目,那是在学校跟几个朋友一起合作写的MOBA类型的游戏,想起了当年的热血,也准备在工作之余重新开启这个项目,这些都是题外话,项目中有刀光残影的效果,是使用的一个叫《PocketRPGTrails》的插件,效果还是不错的,不过插件说明和案例都是用的animation组件,那么animator下怎么使用呢?unity残影拖尾插件PocketRPGTrails下载地址:http://pan.baidu.com/s/1i3kq5V3
首先,插件中提供的AnimationController脚本就不能使用了,需要我们自己写一个Trail脚本。代码如下: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);
            }
      }
    }
}
把这个脚本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更改后如下: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);
            }
      }
    }
}
然后找到攻击动画,找到自己觉得应该出现残影的那一帧,添加一个事件。如我的攻击动画第一帧,添加上一个事件,如何添加动画关键帧:怎么预览动画肯定知道吧,点击Events下的按钮,就是在当前预览的动画暂停的那一帧上添加一个事件。弹出来的窗口Object选择 Trail脚本,Function写上"TrailStart"。这样就是当动画播放到这一帧的时候,会自动调用这个函数开启残影。如下图:那么结束就应该是找到结束的那一帧添加一个事件,调用TrailStop函数。这里就不写、也不放图了。一些细节就看自己慢慢调了~
我们的MOBA里面的效果:有任何问题直接留言或者微博或者qq都可以~及时解答大家问题~

游益智 发表于 2015-3-21 17:59


不错 不错 不错{:soso__3922851084632044791_6:}

qq534575060 发表于 2015-3-26 00:19

游益智 发表于 2015-3-21 17:59 static/image/common/back.gif
不错 不错 不错

谢谢支持~哈哈~

葉明豬 发表于 2017-2-11 12:41

很不错

zkq 发表于 2017-2-11 12:47

楼主是超人

Falcon 发表于 2017-2-11 12:21

顶顶多好

Falcon 发表于 2017-2-11 12:06

真心顶

baron 发表于 2017-2-11 12:33

说的非常好

mybenson 发表于 2017-5-6 19:45

很不错

老陶 发表于 2017-5-6 19:30

楼主是超人
页: [1]
查看完整版本: [unity3d插件]如何在Animator中使用刀光残影插件”PocketRPGTrails”