Animal Cotroller文件——Main

陈侠云發表於2024-10-29

MAnimal Controller

動物指令碼負責控制動物的所有運動邏輯。它管理所有的Animator和Rigid Body引數,以及動物可以執行的所有States和Modes。

Main Principles

Animal Controller(AC) 是一個動畫框架控制器,支援根運動或就地動畫,適用於任何生物或人形角色。它使用Rigidbody與物理世界互動,並使用Animator播放動畫。

AC使用States、Modes和Stances在Animator上播放動畫。

States

States是互不重疊的動畫。例如,動物不能同時奔跑和跳躍,也不能同時飛行和游泳。

這些動畫也需要一些內部邏輯來工作。

例如,對於行走,動物需要與地面對齊。對於游泳,動物需要與水面對齊。對於下落,動物需要受到重力影響。

Modes

Modes則是一組稱為Abilities的動畫,可以在State動畫上播放。例如,動物可以在奔跑時攻擊,在飛行時閃避,在下落時受到傷害等。

在大多數情況下,這些動畫不需要應用任何特定邏輯,但如果需要自定義邏輯,可以應用Mode Modifier來改變Mode動畫的一些效果。

Stances
Stances是State動畫的變體。例如,運動動畫(行走、奔跑)可以以不同方式播放。如果動物受傷,或者蹲伏/潛行,或者用兩條腿站立,角色的行走方式可以不同。它仍然處於Locomotion State,但處於不同的姿態。

Main Components

Animal Controller需要Animator和RigidBody才能工作。這兩個元件需要與Animal指令碼處於同一層級。

Animator Component

  • 由於我們使用了RigidBody元件,建議將Update Mode設定為Animate Physics。
    image

Rigid Body

RigidBody元件允許Animal與場景中的其他剛體和靜態物件進行互動。

  • 旋轉將由Animal元件處理,因此透過程式碼,所有旋轉將被鎖定:
    image

Colliders

  • 對於所有生物,建議在生物的主要骨骼上新增Colliders,例如Spine和Head。不過,如果你願意,也可以僅在Root GameObject上新增一個Capsule Collider。
    image
  • 如果在角色的Root上新增一個Main Collider,碰撞體必須不能接觸地面,這會導致在斜坡上出現滑動問題。
    image

Layer

Animal Controller預設設定為Layer "Animal"。動物遊戲物件層級中的所有遊戲物件也應設定為相同的層。

攻擊觸發器、互動觸發器以及其他不屬於Animal本身的Colliders應設定為Ignore Raycast Layer。

Animator Controller

Animator Controller是Animal指令碼的核心動畫邏輯。它將與Animal指令碼進行雙向通訊,以通知當前播放的動畫以及Animal所處的State、Mode或Stance。
image
為了讓Animal Controller正常工作,動畫狀態被標記為獨特的Tags,以便查詢和檢查當前播放的動畫是否與Animal元件命令的動畫匹配。

Tags如(Locomotion、Jump、Idle、Fly、Fall等)。

這樣,控制器就能知道Animator是否在活動State中播放正確的動畫。
image

相關文章