准備階段

為了方便和節省時間, 我這里舉的粒子直接使用 unity 的免費素材 Kevin Lglesias
導入項目后可以看到如下項目結構

我們這里主要需要用到的就是 Animations 目錄下的 墨綠色 icon 的動畫文件(我用的是 unity 2019.3.1 版本, 使用UI是這個)
第一步: 點開 Models 文件夾會有一個模型, 把它拖到場景中

第二步: 新建一個 Animaction Controller 文件, 並將其拖到箭頭所指的位置, 並雙擊打開文件
選中 Entry 按鈕, 右鍵點擊網格界面 Create State --> Empty

將 new State 改名為 Run 方便區分

右鍵選擇 Run , Create new Blend Tree in State

然后雙擊 Run , 打開 Blend Tree 編輯界面

第三步: 添加動畫到動畫狀態樹

點擊 + 號, 選擇 add motion field, 然后將 上面提到的 Animactions 文件夾目錄下的墨綠色icon
拖到 Motion 里

ldle01 是原地不動, walk01 是走路, 但是這兩個動畫都是原地不動的, 這時我們只要播放動畫, 然后再調節 Blend , 就可以看到同一模型在不同 blend 參數下的動畫變化了

其中有個參數 Threshold , 這個參數表示當 Blend 的參數值達到這個值時, 動畫全速播放, 也就是完整速度播放
第四部: 將 animation controller 文件拖到模型的 Animator 組件中

然后在模型上掛載一個 C# 腳本, 這里叫 RunSpeed.cs
然后就直接貼代碼了, 當然, 為了更加方便直觀的模擬在現實過程中動畫根據參數的變化而變化的情況, 我建議新建一個 slider 組件, 用來動態傳遞參數
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class RunSpeed : MonoBehaviour { protected Animator run; // animation controller 動畫文件 public Slider slider; // 動態參數傳遞的滑塊 void Start() { run = GetComponent<Animator>(); //初始化動畫 } void Update() { float status = slider.value; //實時獲取滑塊數據 if (run) { AnimatorStateInfo stateInfo = run.GetCurrentAnimatorStateInfo(0); if (stateInfo.IsName("Base Layer.Run")) { //獲取 Base Layer 動畫節點下的名為 Run 的 State run.SetFloat("Blend", status); //設置 Blend 參數 } } } }

這樣的話, 一個簡單的動畫播放控制就完成了, 雖然步驟很復雜, 但是只要動手實踐過一兩次之后會發現很簡單呢~
