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。
Rigid Body
RigidBody组件允许Animal与场景中的其他刚体和静态对象进行交互。
- 旋转将由Animal组件处理,因此通过代码,所有旋转将被锁定:
Colliders
- 对于所有生物,建议在生物的主要骨骼上添加Colliders,例如Spine和Head。不过,如果你愿意,也可以仅在Root GameObject上添加一个Capsule Collider。
- 如果在角色的Root上添加一个Main Collider,碰撞体必须不能接触地面,这会导致在斜坡上出现滑动问题。
Layer
Animal Controller默认设置为Layer "Animal"。动物游戏对象层级中的所有游戏对象也应设置为相同的层。
攻击触发器、交互触发器以及其他不属于Animal本身的Colliders应设置为Ignore Raycast Layer。
Animator Controller
Animator Controller是Animal脚本的核心动画逻辑。它将与Animal脚本进行双向通信,以通知当前播放的动画以及Animal所处的State、Mode或Stance。
为了让Animal Controller正常工作,动画状态被标记为独特的Tags,以便查找和检查当前播放的动画是否与Animal组件命令的动画匹配。
Tags如(Locomotion、Jump、Idle、Fly、Fall等)。
这样,控制器就能知道Animator是否在活动State中播放正确的动画。