混合动画

在状态之间交叉淡化动画

../../_images/crossfade-animations.gif

当应用程序在各自驱动不同动画的状态之间迁移时,您可以通过在退出动画和进入动画之间进行交叉淡化来使变化更加平滑。退出动画会在您在状态迁移中设置的持续期间内淡出,同时进入动画淡入,而不是突然切换。

要使 State Manager 在两个动画之间交叉淡化,请在两个状态中各配置一个同名的 Animation Player。当 State Manager 在这两个状态之间迁移时,它会在迁移持续期间内混合退出和进入的 Animation Player 回放。

要在状态机于状态之间迁移时交叉淡化动画:

  1. 为每个状态创建关键帧动画。请参阅 创建关键帧动画。

    例如,为 3D 角色节点创建两个循环的 Animation Clip 资源:一个以空闲姿态动画化角色,另一个动画化角色行走。

  2. 在 Node Tree 中选择要动画化的节点,并在该节点上的 State Manager 中添加两个状态。请参阅 使用状态机。

    例如,创建一个包含状态 Idle 和 Walking 的状态机。

    ../../_images/crossfade-states-create.png
  3. 在每个状态中添加一个 Animation Player 节点组件,并为这两个 Animation Player 节点组件设置相同的名称。

    State Manager 使用该名称来匹配退出和进入的 Animation Player 组件,以便在它们的动画之间进行交叉淡化。

    例如,将两个 Animation Player 节点组件都命名为 CharacterAnimation。

    ../../_images/crossfade-animation-player-create.png
  4. 在每个状态中,将 Animation Player 的 Target Animation Timeline 属性设置为该状态的动画,并启用 Autoplay Enabled。

    Autoplay Enabled 确保动画在状态激活后立即开始。如果不启用该属性,进入的 Animation Player 永远不会开始,交叉淡化也会被跳过。

    例如:

    • 在 Idle 状态中,将 CharacterAnimation 的 Target Animation Timeline 设置为空闲动画,并启用 Autoplay Enabled。

    • 在 Walking 状态中,将 CharacterAnimation 的 Target Animation Timeline 设置为行走动画,并启用 Autoplay Enabled。

    ../../_images/crossfade-animation-setup.png ../../_images/crossfade-states-set.png
  5. 设置状态之间迁移的持续期间。请参阅 使用状态迁移。

    ../../_images/crossfade-transition-duration.png

    备注

    在状态迁移上配置的缓动函数不影响交叉淡化。混合始终在配置的持续期间内遵循线性曲线。

当 State Manager 在状态之间迁移时,退出动画会继续播放并淡出,同时进入动画开始并在您设置的迁移持续期间内淡入。

未被进入动画动画化的属性会平滑地混合到其默认值,而不是突然切换。

备注

当进入的 Animation Player 使用 Relative Playback 时,不支持交叉淡化。如果进入的播放器启用了 Relative Playback,迁移会立即完成,不进行交叉淡化。

另请参阅

使用关键帧动画

创建关键帧动画

编辑时间线序列

使用状态机

使用状态迁移