1. 程式人生 > >Unity 武器拖尾效果

Unity 武器拖尾效果

cti any 時間 只需要 由於 插件 new rate public

Pocket RPG Weapon Trails 武器拖尾效果 Asset Store地址:https://www.assetstore.unity3d.com/en/#!/content/2458
CSDN資源地址:http://download.csdn.net/detail/akof1314/7610241 截圖:
技術分享圖片
技術分享圖片

由於這個插件提供的AnimationController.cs僅對Animation動畫進行支持,對Animator動畫支持的話需要自己實現。文檔上說明實現的方式:
  • The WeaponTrail can be built by calling Itterate(float itterateTime)
    and UpdateTrail(float currentTime, float deltaTime). These functions are called by AnimationController, however if you don‘t want to use AnimationController you can call these yourself.
即只需要調用ItterateUpdateTrail方法。下面使用另外的角色模型進行測試拖尾效果。 測試角色的模型包:https://www.assetstore.unity3d.com/en/#!/content/15103
CSDN資源地址:http://download.csdn.net/detail/akof1314/7610385
首先,在Animator
窗口,創建休閑idle狀態和攻擊attack狀態,設置它們相應的Motion,設置從idle到attack的動畫參數為Attack,類型為Trigger,如下圖所示:
技術分享圖片
技術分享圖片
Speed屬性可以控制當前狀態動作的速度。接著,創建個腳本TestMyTrail.cs附加到角色上,腳本代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using UnityEngine;
using System.Collections;

public class TestMyTrail : MonoBehaviour {

private Animator animator;

void
Start () {
animator = GetComponent<Animator>();
}

void OnGUI()
{
if (GUI.Button(new Rect(0, 0, 50, 50), "攻擊"))
{
animator.SetTrigger("Attack");
}
}
}
運行,可以看到默認角色是休閑狀態,點擊按鈕是攻擊狀態,如下圖所示:
技術分享圖片技術分享圖片
查看模型,可以看到武器是綁在右手上的,如下圖所示:
技術分享圖片武器(Object003)添加一個子對象,命名為Trail,為其添加WeaponTrail.cs腳本、Mesh Renderer組件,材質為Pocket RPG Trails提供的材質,設置好如下圖所示:
技術分享圖片
修改TestMyTrail.cs代碼為如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using UnityEngine;
using System.Collections;

public class TestMyTrail : MonoBehaviour {

public WeaponTrail myTrail;

private Animator animator;
private float t = 0.033f;
private float tempT = 0;
private float animationIncrement = 0.003f;

void Start ()
{
animator = GetComponent<Animator>();
}

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);
}
}
}

void OnGUI()
{
if (GUI.Button(new Rect(0, 0, 50, 50), "攻擊"))
{
animator.SetTrigger("Attack");
}
}
}
Trail對象賦給My Trail屬性,如下圖所示:
技術分享圖片
現在運行,可以看到休閑狀態時,武器拖尾的若隱若現,如下圖所示:
技術分享圖片
攻擊時的效果:
技術分享圖片
要調整好Trail對象的位置、旋轉等,盡量貼合武器,設置拖尾的高度,盡量與武器同長度,才能產生較好的效果。當攻擊結束,武器往回收的時候,也會有拖尾,如下圖所示:
技術分享圖片
如果要去掉這個時候的拖尾,可以采用更精確的控制拖尾的出現。選中攻擊動作,切換到"Animations",播放動作,在攻擊開始時刻,添加一個事件,如下圖所示:
技術分享圖片
在攻擊完畢,也添加一個事件,如下圖所示:
技術分享圖片 點擊"Apply"進行應用。修改TestMyTrail.cs代碼為如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void Start ()
{
animator = GetComponent<Animator>();
// 默認沒有拖尾效果
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();
}
現在運行,就會發現休閑狀態時候,不會有拖尾效果,當進行攻擊時,拖尾只在相應的時間點進行出現,如下圖所示:
技術分享圖片
武器回收的時候,也不會有拖尾了,如下圖所示:
技術分享圖片

參考資料:
1.Unity3D 武器拖尾效果(刀光) 使用PocketRPG Trails http://blog.csdn.net/xv_ly15/article/details/8509781
2.Unity3D研究院之揮動武器產生的劍痕特效(四十七) http://www.xuanyusong.com/archives/2110

再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://www.cnblogs.com/captainbed

Unity 武器拖尾效果