Unity Ninja 忍者角色製作教學

本教學介紹製作 Unity 忍者角色,使用 Bare Ninja AnimSet 動作資源,需要另下載忍者角色與武器 [瀏覽]

從資源商店搜尋 Bare Ninja Anim Set 下載到專案,另可下載免費 Shuriken pack 武器資源包。

從 Mixamo 網站下載 Ninja 忍者角色,因為 Bare Ninja AnimSet 提供完整忍者動作,從網站下載時不需要選擇動作。

將忍者的 FBX 模型檔案命名為 “Ninja" 並拖曳到場景中的原點位置,套用 Rigidbody 剛體元件與膠囊碰撞器。

建立忍者角色使用的 Animator Controller 動畫控制器,稍後加入待機、移動、跳躍、攻擊、防禦、倒地等動作。

 

製作忍者移動功能

建立一個新的場景,加入提供遊戲角色移動的地面面,並將角色拖曳到原點位置進行編輯。

加入 Rigidbady 剛體元件與 Capsule Collider 膠囊碰撞器,再調整碰撞器的位置與高度。

建立動畫控制器,命名為 "Player Animator Controller" 並套用到「場景」的遊戲角色。

雙擊剛建立的動畫控制器開啟 Animator 編輯器,右鍵 [ Create State > From New Blend Tree ] 建立混合樹。

剛建立的混合樹重新命名為 "Locomotion" 並在 Inspector 設定 Blend Type = 2D Freeform Directional 類型。

建立參數 Speed (float) 用於控制移動速度;再建立 Turn (float) 用於控制轉向,注意參數名稱大小寫的差別。

將混合樹的 Parameters 設為 X = Turn 控制玩家的轉向; Y = Speed 控制移動速度,概念類似遊戲搖桿的方向。

點擊 Inspector 下方的 + 選擇 Add Motion Field 增加動作欄位,可先增加 5 個欄位用於製作待機與前後移動。

開啟 [ Ninja_AnimSet > Animation > Humanoid ] 資料夾,將忍者待機與前後移動的動作拖曳到對應的欄位。

 

Motion Pos X Pos Y
待機 idle_inplace 0 0
向前走 walk_F 0 0.5
向前跑 run_F 0 1
向後走 walk_B 0 -0.5
向後跑 run_B 0 -1

按下 Play 測試遊戲,使用滑鼠拖曳 Animator 視窗中 Locomotion 混合樹的 Speed 參數滑桿測試角色的移動。

若無問題按下 Play 回到編輯模式,再增加左轉右轉的動作。

Motion Pos X Pos Y
向左走 walk_L -0.5 0
向左跑 run_L -1 0
向右走 walk_R 0.5 0
向右跑 run_R 1 0

 

透過將 C# 腳本控制這些參數,讓遊戲角色移動與轉向,稍後發現角色無法控制請檢查參數名稱是否正確。

此時按下 Play 測試遊戲將會發現無法控制角色,因為 Player Controller 腳本元件的數值仍是預設值 0

選取忍者角色,在 Inspector 找到 Player Controller 腳本元件,將 Speed 與 Turn 設定大於 1 再進行測試。

 

 

製作忍者跳躍功能

按下 Space 空白鍵跳躍,注意!使用 Update ( ) 即可,使用 FixedUpdate ( ) 將會讓跳躍的高度變得難以控制。

注意!忍者角色使用 Rigidbody.AddForce 向上推動,必須有 Rigidbody 剛體元件,否則將會出現以下錯誤訊息!

若有興趣瞭解 Rigidbody.AddForce 使用方式請參閱官方網站 [ Scripting API ]

為了避免忍者跳躍時,沒落地可以重複跳躍的問題,修改 PlayerController 腳本 [ 檢視 ]

 

製作忍者轉向功能

資源包收錄的 只有左轉與右轉的動作,並沒有實際的轉向,若玩家按下鍵盤 A / D 或左右方向鍵,讓忍者角色產生左右轉動的效果。至於轉向的速度透過 turn (float) 變數控制,預設值為 180 。

 

製作忍者攻擊動作

選取從 Locomotion 到 Attack 的箭頭,設定 Conditions 轉換條件 Attack 觸發時轉換攻擊動作。

取消 Has Exit Time 讓 Locomotion 動作可立即轉換 Attack 動作,沒有取消的話將會先完成前面的動作,經常會造成動作延遲。

 

目前只有投擲的攻擊動作,實際上並沒有投射任何武器。接著製作手裏劍(日本忍者使用的投射類武器)。

建立一個腳本並命名為 "Shuriken" 功能是讓手裏劍動態生成後,透過 Rigidbody.AddForce 施加力場向前推動。

手裏劍模型從匯入的 Shuriken pack 資源包取得,套用 Rigidbody 剛體元件、碰撞器、Trail Renderer 元件。

套用 Shuriken 腳本後,設定 Speed 調整手裏劍的速度,並將 Shuriken 手裏劍轉成預製物件。

 

玩家進入遊戲時按下攻擊,將會從特定位置動態生成手裏劍,然後再透過前面的 Shuriken 腳本推動產生投射。

建立一個空物件並重新命名為 "ShurikenThrower" ,再建立腳本並命名為 ShurikenThrower 並套用到物件,程式碼如下:

忍者投擲的動作會讓動態生成手裏劍的時間稍微延遲,因此不直接使用 Update ( ) 執行,改以 Invoke ( ) 調用自訂方法。

 

將剛才製作的 ShurikenThrower 物件拖曳到忍者角色前方,測試並調整手裏劍發射的位置,

此步驟讓 ShurikenThrower 成為 Ninja 忍者角色的子物件,當角色移動時將會跟著同時移動。

 

加入閃避與防禦動作

閃避與防禦的動作都需要立即執行,取消 Has Exit Time 選項。

 

忍者的防禦動作

if (Input.GetMouseButton(1)){

anim.SetBool("Defense", true);

}

else{

anim.SetBool("Defense", false);

}

 

忍者的防禦動作若直接使用會出現與待機切換情況,需要切成 3 個部份,開始防禦、保持防禦、結束防禦。

開啟 [ Ninja_AnimSet > Animation > Humanoid ] 資料夾選取 defence.fbx 檔,點擊箭頭展開可選取 defence 動作,

將原本的防禦動作名稱改為 defence start 並設定適當動作範圍。

建立 Clip 動作片段時,記得按下 Apply 按鈕套用設定,完成以上步驟後可在 Project 視窗看到 defence.fbx 下方分割的動作。

動畫控制器,防禦動作改為 3 個狀態,並新增轉換的箭頭。

 

選取從 Locomotion 到 Defence Start 動作的箭頭進行設定。

選取從 Defence Start 到 Defence 動作的箭頭,無需設定條件。

選取從 Defence 到 DefenceEnd 動作的箭頭進行設定。

 

忍者角色防禦動作後出現往上飄,是 defence 與 defence end 動作的問題。

解決方法是將 Root Transform Position ( Y ) 下方的 Bake Into Pose 勾選後,按下 Apply 按鈕套用即可。