Overview
States是动物控制的核心逻辑,使动物能够移动、坠落、跳跃、死亡等。
States的动画相互独立。例如,动物不能同时处于奔跑和跳跃,或飞行和游泳状态。
它们按优先级排序,优先级高的状态将优先尝试激活,之后才是优先级低的状态。
- 如果一个高优先级状态是当前激活的状态,低优先级状态将不会尝试激活,除非当前激活状态允许退出。使用State.AllowExit()将允许低优先级状态再次有机会激活。
- 因此,当动物处于飞行状态时,所有低优先级的状态如坠落、游泳或跳跃将不会激活,除非飞行状态调用AllowExit()。
Override Start State
允许动物控制器以自定义状态启动,而不是初始化为[Idle]状态。
如果希望动物以飞行状态开始,可以在此处设置飞行ID。
Clone States
此选项将在运行时克隆所有状态脚本资源,这样每只动物都会有独特的状态。
- 如果您将动物用作主要角色,可以禁用克隆状态选项,并修改内部值。
所有状态共享通用参数,以便在状态的核心动画播放时或激活新状态或模式时轻松更改动物控制器的属性。
Animator
所有状态至少需要在Animator中有一个动画状态,即使不需要或没有动画,您也可以创建一个空的动画状态或使用现有的动画片段。
General
ID
状态的唯一ID,用于识别每个状态。当创建状态时,这些ID会自动添加。
- 状态名称(例如,[Death])必须作为该状态主要动画的标签,否则控制器将无法正常工作。
Priority
状态的优先级,值越高,激活的几率越大。
该值由动物控制器自动为每个状态设置,也可以在状态列表中进行修改。
State Profile
允许不同的状态使用方式,例如,可以设置两个飞行配置文件,一个是像钢铁侠一样飞行,另一个是使用扫帚飞行。
Enter Input
用于激活 State 的输入。该参数完全可选,因为某些 State 会自动激活,比如当动物接近水时 Swim 会激活,或当动物没有地面支撑时 Fall 会激活。
- 输入的名称需要与 Malbers Input 组件中的 Input 项目名称匹配。
有些状态不需要输入激活,它们通过 TryActivate() 方法在内部自动激活。以下是一些示例: - Idle -> Movement 向量为 Vector3.Zero。
- Locomotion -> Movement 向量不是 Vector3.Zero。
- Fall -> 动物下方没有地面。
- Swim -> 动物处于 Layer 为 Water 的触发器内。
还可以使用 MAnimal.State_Activate(StateID state) 来激活任何 State。比如Health状态为零时激活死亡状态(可以在 Stats 组件 -> Health Stat 中查看)。
Exit Input
如果有输入与该参数连接,则允许 States 退出。
- 例如 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,使它们不会直接从主动画状态退出。
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 动画时,我们需要:
- 禁用 Root Motion 和 Sprint。
- 启用 Gravity。
- 动物不能处于 Grounded 状态或使用自定义旋转。
- 禁用 Ignore Lower States(允许低优先级 States 激活)。
- 启用额外的位置速度。
Enter Tag
Animator 标签,用于标识 State 中的进入动画,例如 Fly 的 'TakeOff' 或 Swim 的 'EnterWater'。
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)
可使用此部分根据在 State 中激活的特定动画设置附加修改器,例如 FallEdge 或 Fall 状态中的 Landing,以便这些动画具有略微不同的修改器。
Limits
限制允许您在另一 State、Mode 或 Stance 正在播放时对 States 设置限制。
Sleep From State
如果当前激活的 State 在列表中,则该 State 不能被激活。
- 例如:当动物处于 Fall、Fly 和 UnderWater 状态时,Jump State 被设置为 Sleep。
- 查看 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。例如:动物在攻击时不能跳跃。
- 查看 State 列表:Jump State 在 Attack 播放时设置为 [SleepM]。
Sleep From Stance
如果一个 Stance 正在播放,可以在 Stance 播放期间将 State 设置为 Sleep。例如,在平衡状态(如在绳索上行走)中不能跳跃。
Allowed Stances
可以设置在此状态中允许播放的 Stances。保持为空以包含所有。
Debug
当编辑器处于 Play 模式时,会调用 State.Debug() 函数,每个 State 启用其 Gizmos 和日志。