Unity Runner Action Animation Pack 教學

Runner Action Animation Pack 收錄大量角色移動與攻擊的動作,適用於製作 Unity 跑酷遊戲或動作遊戲。

本教學是使用 Runner Action Animation Pack v1.6 版,此版本擁有 350 種不同的情境動畫,包括 361 個 Root motions 動畫與 457 個Inplace motions原地動畫,資源包大小約 350 MB。

Update v1.6 新增 WallRun_Hold Set 與 8Way Strafe Movement Start Set 動畫

Update v1.5 新增 90/180 度原地轉 & Start Walk,Jog Animations 動畫

Update v1.4 新增 WallBoostDash, WallClimb, WallJump Animations 動畫 [ Youtube ]

Update v1.3 新增 90Arc,180Turn Movement Animations 動畫 [ Youtube ]

Update v1.2 新增 Escape Type, 8way BoostDash Movement Animations 動畫 [ Youtube ]

Update v1.1 新增 跑酷動作 (HandSpring, TurnHandSpring, RackSpring, AirRollJump) 動畫 [ Youtube ]

Update v1.0 新增 8way movement Animation files (Jog, Run, Boost, Stop Set) 動畫 [ Youtube ]

Animation Configuration
Part1. Movement Type Animations 角色移動的動畫
Part2. Escape Action Type Animations
Part3. Jump Action Type Animations 角色跳躍的動畫
Part4. Attack Action Type Animations 角色攻擊的動畫
Part5. Collision Reaction Type Animations 碰撞的動畫
Part6. Wallrun Type Animations 牆面奔跑的動畫

ClazyRunnerAnimList 動作清單( Google 試算表

 

產品資訊

1. 角色已設置為 Humanoid 型態,其中包括手指、肩膀、手臂、腿部的骨架。

2. 全部的動畫使用井然有序的方式存放,按照名稱可以快速找到需要的動畫。

3. 除了部份動作按需求區分外,大部份動畫提供 root motion 與 in-place motion 版本。

4. 宣傳影片的角色並未包含在實際的資源包,但收錄的角色模型具有完全相同的骨骼結構。

 

首先從資源商店下載 Runner Action Animation Pack到遊戲專案。

開啟 [ CLazyRunnerActionAnimPack > Scenes ] 資料夾的展示場景:

Scene1_ClazyMovement

Scene2_ClazyEscape

Scene3_ClazyJump

Scene4_ClazyAttack

Scene5_ClazyCollision

Scene6_ClazyWallRun

Runner Action Animation Pack 展示場景可供快速搜尋需要的動作,建議不要隨意修改。

Runner Action Animation Pack v1.6 支援 Unity Mecanim 動畫系統,可將收錄的動作套用到支援的遊戲角色。

不過沒有提供完整的動畫控制器與控制腳本,必須自行製作。

待機 / 原地走路 / 原地轉動 / 原地跑步 / 原地狂奔 / 揮拳攻擊

匯入 Runner Action Pack 資源包,匯入 Space Robot Kyle 機器人或是其他 Mecanim 角色模型。

將 Space Robot Kyle.fbx 的 Animation Type 改為 Humanoid 然後拖曳到遊戲場景。

教學範例有匯入 Cameras 攝影機與 Prototyping 原型設計資源,用於製作跟蹤玩家的攝影機與場景地面。

 

 

將遊戲角色套用 "Player" 標籤,讓攝影機自動跟隨。

執行 [ Create > Animator Controller ] 建立動畫控制器,命名為 "Player Animator Controller" 並指定到遊戲角色。

按下 Player 測試遊戲,玩家角色沈沒地面,解決方法是指定一個動作,例如將

Mvm_Idle > CLazy@Idle_Wait_A 待機動作拖曳到動畫控制器,按下 Player 測試遊戲,玩家角色出現待機。

 

 

 

執行 [ Create > Animator Controller ] 建立動畫控制器,使用 Root motion 動畫檔。

雙擊開啟動畫控制器,首先加入遊戲角色的出場動作,開啟 ... P2_CLazyEscape > Esc_Spawn ] 資料夾,
將 CLazy@Esc_Spawn_Root 動作拖曳到動畫控制器。

加入行走動畫,滑鼠右鍵執行Create State > From New Blend Tree 建立動畫混合樹。

將出場動畫連結到行走動畫的混合樹。

設定適當混合樹名稱,並新增 Parameters 參數:

MoveSpeed (float)
RotateSpeed (float)

設定混合樹 Blend Type = 2D Freeform Directional
設定混合樹 Parameters 的水平軸 = RotateSpeed ;垂直軸 = MoveSpeed 。

按 + 選擇 Add Motion Field 增加動畫,先增加到 5 個動畫,分別是待機、前進、後退、左轉、右轉。

為這些動作設定對應的座標,然後加入對應的動畫:

Idle_Wait_A, Mvm_Walk_Root, Mvm_Walk_Back_Root, Mvm_Walk_Front_L_Root, Mvm_Walk_Front_R_Root

以上這些動畫檔案需要個別修改,選取 FBX 檔後在 Inspector 選擇 Animation 分頁再將
Root Transform Position (XZ) 的 Back Into Pose 取消勾選(預設啟用),再按 Apply 套用設定。

建立 C# 腳本,程式碼如下:

Animation m_Animation;

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

void Update(){
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");

m_Animator.SetFloat("MoveSpeed", v);
m_Animator.SetFloat("RotateSpeed", h);
}

將此腳本附加到場景的遊戲角色,按下 Play 測試遊戲,確認按下方向鍵時出現對應的動作。

加入跑步動作

遊戲角色的基本移動製作完成後,加入跑步的動作。

Mvm_Jog_Root
Mvm_Jog_Back_Root
Mvm_Jog_Front_L_Root
Mvm_Jog_Front_R_Root
Mvm_Jog_Arc_90_Left_Root /
Mvm_Jog_Arc_90_Right_Root /
Mvm_Jog_Back_L45_Root
Mvm_Jog_Back_R45_Root

加入以下程式碼:

public KeyCode runCode = KeyCode.LeftShift;
bool isRun() { return Input.GetKey(runCode); }

void Update(){
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");

if(isRun()){
m_Animator.SetFloat("MoveSpeed", v);
m_Animator.SetFloat("RotateSpeed", h);
}
else{
m_Animator.SetFloat("MoveSpeed", v * 0.5f);
m_Animator.SetFloat("RotateSpeed", h * 0.5f);
}
}

加入衝刺
Mvm_PowerDash_Front_Root
Mvm_PowerDash_Front_L45_Root
Mvm_PowerDash_Front_R45_Root
Mvm_PowerDash_Front_L_Root
Mvm_PowerDash_Front_R_Root

加入跳躍的動作
Jump_Base_A 一般跳躍

增加參數 Jump(Trigger)

選取跳躍動作,在 Inspector 修改 Root Transform Position(Y) 的設定:
Bake Into Pose 取消勾選(預設是打勾的)
Based Upon = Feet (跳起來時膠囊碰撞器底部與腳的位置同步)

public KeyCode jumpCode = KeyCode.Space;
public bool isGround; //判斷角色是否站在地上

void OnCollisionEnter(Collision collision){
isGround = true;
}

void OnCollisionExit(Collision collision){
isGround = false;
}

實際跳的動作

void Update (){
if(Input.GetKeyDown(jumpCode)){
Jump();
}
}

public void Jump(){
if(isGround == false) { return; }
m_Animator.SetTrigger("Jump");
}

 

加入跑步的操作。