Animal Controller文件——States

陈侠云發表於2024-11-13

Overview

States是動物控制的核心邏輯,使動物能夠移動、墜落、跳躍、死亡等。

States的動畫相互獨立。例如,動物不能同時處於奔跑和跳躍,或飛行和游泳狀態。

它們按優先順序排序,優先順序高的狀態將優先嚐試啟用,之後才是優先順序低的狀態。

image

  • 如果一個高優先順序狀態是當前啟用的狀態,低優先順序狀態將不會嘗試啟用,除非當前啟用狀態允許退出。使用State.AllowExit()將允許低優先順序狀態再次有機會啟用。
  • 因此,當動物處於飛行狀態時,所有低優先順序的狀態如墜落、游泳或跳躍將不會啟用,除非飛行狀態呼叫AllowExit()。

Override Start State

允許動物控制器以自定義狀態啟動,而不是初始化為[Idle]狀態。

如果希望動物以飛行狀態開始,可以在此處設定飛行ID。
image

Clone States

image
此選項將在執行時克隆所有狀態指令碼資源,這樣每隻動物都會有獨特的狀態。

  • 如果您將動物用作主要角色,可以禁用克隆狀態選項,並修改內部值。

所有狀態共享通用引數,以便在狀態的核心動畫播放時或啟用新狀態或模式時輕鬆更改動物控制器的屬性。

Animator

所有狀態至少需要在Animator中有一個動畫狀態,即使不需要或沒有動畫,您也可以建立一個空的動畫狀態或使用現有的動畫片段。

General

image

ID

狀態的唯一ID,用於識別每個狀態。當建立狀態時,這些ID會自動新增。
image

  • 狀態名稱(例如,[Death])必須作為該狀態主要動畫的標籤,否則控制器將無法正常工作。
    image

Priority

狀態的優先順序,值越高,啟用的機率越大。

該值由動物控制器自動為每個狀態設定,也可以在狀態列表中進行修改。
image

State Profile

允許不同的狀態使用方式,例如,可以設定兩個飛行配置檔案,一個是像鋼鐵俠一樣飛行,另一個是使用掃帚飛行。

Enter Input

用於啟用 State 的輸入。該引數完全可選,因為某些 State 會自動啟用,比如當動物接近水時 Swim 會啟用,或當動物沒有地面支撐時 Fall 會啟用。

  • 輸入的名稱需要與 Malbers Input 元件中的 Input 專案名稱匹配。
    image
    有些狀態不需要輸入啟用,它們透過 TryActivate() 方法在內部自動啟用。以下是一些示例:
  • Idle -> Movement 向量為 Vector3.Zero。
  • Locomotion -> Movement 向量不是 Vector3.Zero。
  • Fall -> 動物下方沒有地面。
  • Swim -> 動物處於 Layer 為 Water 的觸發器內。

還可以使用 MAnimal.State_Activate(StateID state) 來啟用任何 State。比如Health狀態為零時啟用死亡狀態(可以在 Stats 元件 -> Health Stat 中檢視)。
image

Exit Input

如果有輸入與該引數連線,則允許 States 退出。
image

  • 例如 Climb 狀態可以在按下 Crouch 鍵時退出

Reset Input on Failed

如果 State 嘗試透過輸入啟用但失敗,可以透過切換此選項來重置輸入值(提示 - 檢查除錯日誌瞭解更多資訊!)。

Always Forward

如果希望角色在此 State 中只能向前移動,可將此項設為 true,例如無盡奔跑型別的遊戲。

Reset Last State

進入此 State 時,將重置上一個 State 的 Animator 引數為 -1。

Allow Exit From Anims

若要允許 State 退出,動畫需要在 Animator 上使用 [Allow Exit Behaviour]。

這適用於需要退出動畫的 State,使它們不會直接從主動畫狀態退出。
image

Can Transition to Itself

即使當前已是該 State,也能再次啟用,例如雙重跳或三重跳。

Exit on Main

設定為 true,以嘗試在主動畫狀態下退出狀態。例如,Falling 動畫可以僅在 Fall 動畫時嘗試退出。

Enter Cooldown

退出後再次啟用該 State 所需的時間。

Exit Cooldown

啟用後退出該 State 所需的時間。

Try Loop

Try States 會在每 x 幀嘗試啟用。

Duration

保持該 State 啟用的時間,之後會執行內部的 AllowExit() 方法 - 若設定為 0,則忽略此選項。

Can Strafe

允許角色在此狀態中橫移。

Strafe Animations

此狀態有新的橫移動畫 - 如果設為 false,則不會更新帶有 [StateOn] 引數的 Animator。

Movement Strafe

檢測到移動時的橫移倍數 - 數值越高,角色橫移時的對齊速度越快。

Idle Strafe

沒有移動時的橫移倍數 - 數值越高,角色在靜止時的對齊速度越快。

Tags

Tags 修改器屬性會在 State 進入 Animator Controller 的 MAIN 動畫時更改 Animal Controller 的主要特性。核心標籤值為 ID 名稱 - [Speeds]。

例如,當動物進入 Fall State 的 MAIN Fall 動畫時,我們需要:
image

  • 禁用 Root Motion 和 Sprint。
  • 啟用 Gravity。
  • 動物不能處於 Grounded 狀態或使用自定義旋轉。
  • 禁用 Ignore Lower States(允許低優先順序 States 啟用)。
  • 啟用額外的位置速度。

Enter Tag

Animator 標籤,用於標識 State 中的進入動畫,例如 Fly 的 'TakeOff' 或 Swim 的 'EnterWater'。
image

Exit Tag

Animator 標籤,用於標識 State 中的退出動畫,例如 Fall 的 'Land' 或 Swim 的 'SwimClimb'。

Exit Frame

當設為 true 且動物從一個 State 切換到另一個時,上一個 State 會在進入新 State 的同時執行另一幀的邏輯。

Messages

當處於狀態時,可以設定訊息傳送。

Use SendMsg

當傳送訊息時,設為 true 將使用 Unity 內建的 SendMessage,而不是 IAnimatorListener 介面。

Children

當傳送訊息時,會將訊息傳送給所有動物的子游戲物件。

Animation Tags (additional modifiers)

image
可使用此部分根據在 State 中啟用的特定動畫設定附加修改器,例如 FallEdge 或 Fall 狀態中的 Landing,以便這些動畫具有略微不同的修改器。

Limits

image
限制允許您在另一 State、Mode 或 Stance 正在播放時對 States 設定限制。

Sleep From State

如果當前啟用的 State 在列表中,則該 State 不能被啟用。

  • 例如:當動物處於 Fall、Fly 和 UnderWater 狀態時,Jump State 被設定為 Sleep。
    image
    image
  • 檢視 State 列表:Jump State 在 Fall 或 Fly 狀態時設定為 [Sleep]。

Queue From

如果啟用的 State 在佇列列表中,則會將該 State 放入佇列,直到動物退出啟用的 State。

例如,如果動物在 Fall State 中,Death State 將被放入佇列,並在 Fall State 結束時啟用。

Reset From

如果該 State 退出,則直到列表中的一個 State 啟用後才可再次使用。例如,可以禁用 Fly,並在角色使用 Idle 或 Locomotion 後重新啟用。

Sleep From Mode

如果某個 Mode 正在播放(例如 Attack、Action),可以透過 Sleep from Mode 列表將 State 設定為 Sleep。例如:動物在攻擊時不能跳躍。
image

  • 檢視 State 列表:Jump State 在 Attack 播放時設定為 [SleepM]。

Sleep From Stance

如果一個 Stance 正在播放,可以在 Stance 播放期間將 State 設定為 Sleep。例如,在平衡狀態(如在繩索上行走)中不能跳躍。

Allowed Stances

可以設定在此狀態中允許播放的 Stances。保持為空以包含所有。

Debug

當編輯器處於 Play 模式時,會呼叫 State.Debug() 函式,每個 State 啟用其 Gizmos 和日誌。

相關文章