找回密码
 立即注册
楼主: 威恩IG

[游戏引擎技术] [unity3d插件]如何在Animator中使用刀光残影插件”PocketRPGTrails”

[复制链接]
发表于 2015-3-19 12:47 | 显示全部楼层 |阅读模式
本帖最后由 威恩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都可以~及时解答大家问题~


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2015-3-21 17:59 | 显示全部楼层

不错 不错 不错{:soso__3922851084632044791_6:}

点评

谢谢支持~哈哈~  详情 回复 发表于 2015-3-26 00:19
发表于 2015-3-26 00:19 | 显示全部楼层
游益智 发表于 2015-3-21 17:59
不错 不错 不错

谢谢支持~哈哈~
发表于 2017-2-11 12:41 | 显示全部楼层
很不错
发表于 2017-2-11 12:47 | 显示全部楼层
楼主是超人
发表于 2017-2-11 12:21 | 显示全部楼层
顶顶多好
发表于 2017-2-11 12:06 | 显示全部楼层
真心顶
发表于 2017-2-11 12:33 | 显示全部楼层
说的非常好
发表于 2017-5-6 19:45 | 显示全部楼层
很不错
发表于 2017-5-6 19:30 | 显示全部楼层
楼主是超人
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-2 11:11 , Processed in 0.264112 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表