跳到主要内容

状态

状态(States)本质上是在状态机中的任意时刻都可以播放的时间线动画。一个状态可以很简单,比如改变对象的颜色和位置;也可以很复杂,比如将多条时间线混合在一起。

在使用状态机时,你会用到几种类型的状态,包括默认状态、单一动画状态和混合状态。下面我们将逐一介绍。

默认状态

默认状态是默认添加到每个状态机中的状态。

Default States

入口状态

入口状态(Entry State)是状态机开始运行时所在的状态。你会注意到,默认情况下,状态机的入口状态已经附加了一个动画,但你可以随时更改这个动画。请注意,如果需要,也可以将多个动画连接到入口状态。例如,你可能想构建一个开关,并允许它以开启或关闭状态开始。

Using the Entry state

退出状态

退出状态(Exit State)会告诉状态机图层停止播放。当使用多个图层时,这个较为特殊的状态会派上用场。

任意状态

与普通状态不同,连接到任意状态(Any State)的状态可以在任何时候播放,而不受状态机当前所在状态的限制。当你想创建一组可随时激活的状态时,任意状态非常有用,例如更改角色的皮肤。

Rating system using the Any state

动画状态

动画状态包括除默认添加到状态机中的默认状态之外的所有状态。这些状态会控制交互内容的外观和运动。动画状态有三种类型:单一动画、1D 混合和直接混合状态。

要向图表中添加状态,可以将动画列表中的动画直接拖放到图表上。注意,这会创建一个单一动画状态。你可以使用检查器更改状态类型。

Drop and drop State onto the Graph

此外,你也可以在图表上右键单击,创建一个没有关联时间线的任意类型空白状态。

Image

右键单击以添加状态。

要为状态指定时间线,请使用检查器中的时间线下拉菜单。

单一动画状态

我们创建的任何时间线都可以用作单一动画状态。根据所使用动画的类型,单一动画状态可以是一次性播放、循环播放或往返播放状态。在大多数情况下,你会使用单一动画状态来创建大部分状态机。

混合状态

混合状态(Blend State)是指将两条或更多时间线动画混合在一起的任何状态。我们会将这些状态用于加载条、生命值系统、滚动交互和动态面部绑定等内容。

混合状态有两种类型:1D 混合状态和直接混合状态。

1D 混合状态

1D 混合状态允许我们使用单个数值型视图模型属性来混合多条时间线。该状态的工作方式是:当你增大或减小一个数值时,一条动画逐渐增强,另一条动画逐渐减弱。请注意,这种混合不是线性的,而是加性的,可能会产生意料之外的结果。

Health bar using Blend state

配置 1D 混合状态:

你需要先为混合状态创建几条时间线。请记住,通常最好使用只为少数属性设置关键帧的时间线。在这个生命值条示例中,只有 X 缩放被设置了关键帧。

Image

生命值条的时间线。

将 1D 混合状态添加到图表后,使用检查器配置该状态。

Add Blend state

首先,使用下拉菜单添加你想用于驱动混合的数值属性。如果你还没有创建数值属性,会发现这里不会显示任何内容。

Create and add number property to Blend state

出现在数值属性下方的加号按钮可用于向混合状态添加时间线。使用下拉菜单指定具体的时间线。请注意,你可以添加任意数量的时间线。

Add timelines to the Blend state

接下来,你需要定义混合状态的工作数值范围。这个示例中的混合范围是 0 到 100。

Image

注意,定义范围后,属性下拉菜单上方会出现一个图形,用于直观表示动画将如何混合。当状态机处于激活状态时,随着你在定义范围内增大或减小属性值,你会看到一个视觉指示在该图形上移动,展示时间线的混合情况。

Blend State in action

加性混合状态

加性混合状态(Additive Blend State)允许你使用多个数值属性将多条时间线混合在一起。这使我们能够通过混合多个动画来创建独特的姿势和面部位置。在使用加性混合时,你会按值或按属性来混合动画。请继续阅读下文。

Using Additive Blend for facial animations

按值混合与按属性混合

向加性混合状态添加动画时,系统会提示你添加“按值混合”动画或“按属性混合”动画。

Adding timeline to Additive Blend

“按值混合”时间线可以理解为基准动画或默认姿势。这个值不绑定到属性,因此不能用于控制状态机。相反,这个值描述的是它的混合权重。

视图模型属性混合是一种通过数值属性与默认姿势或运动进行混合的动画。每个不同的属性混合都应该拥有自己的数值属性。

状态选项

在状态机图表中选择一个状态时,可以在检查器中更改其选项,包括:

  • 名称 - 状态的名称。
  • 说明文字 - 给协作者或未来的自己留下的备注。
  • 类型 - 状态类型,例如单一动画、1D 混合或加性混合。
  • 时间线 - 分配给该状态的动画。
  • 速度 - 时间线播放的速度。
  • 过渡 - 连接到该状态或从该状态连接出去的过渡列表。

说明文字

你可以向状态添加说明文字,为协作者或未来的自己留下备注。

当状态带有说明文字时,状态机图表中的该状态上会显示一个信息图标。将鼠标悬停在图标上即可查看说明文字。

说明文字有助于解释某个状态存在的原因,并记录复杂逻辑。

说明文字只在编辑器中可见。它们不会导出到运行时。

时间线

使用下拉菜单更改分配给当前状态的动画。

Changing animation on a state

速度

使用 速度 更改状态动画的播放速度。正值会正向播放动画,负值会反向播放动画。

Change animation speed

过渡

过渡部分列出了连接到所选状态的过渡。使用眼睛图标可以禁用过渡,或使用 - 按钮将其移除。

动作

你可以在状态开始或结束时执行动作。

动作可用于:

  • 设置属性值
  • 上报事件
  • 对齐目标
  • 控制焦点
  • 触发脚本动作

动作也可以在过渡开始或结束时触发。

请参阅过渡动作

动作时机

每个动作都可以在以下时机运行:

  • 开始 — 状态开始时运行
  • 结束 — 状态完成后运行

创建动作

Creating an transition action

  1. 添加动作

    选中一个状态后,点击状态名称右侧的 + 按钮,然后选择一种动作类型。

  2. 配置动作

    根据动作类型配置该动作。

常见问题

用例:构建一个简单按钮

在这个练习中,我们将运用状态机知识来创建一个带有两层交互的简单按钮:悬停和点击。