跳到主要内容

管理 Animation Clip 引用

我们之前学习到,可以通过直接指定 Animation Clip 来播放动画。但这里有另一种情况:在流程中我们放置了许多 Play Animation Clip Command,其中有一些播放的是同一个动画,例如 Clip A。但当我们想把它们改为播放 Clip B 而不是 Clip A 时,就会遇到问题。逐个修改每一个 Command 会非常麻烦。

这就是 Animation Data 资源的用途。它不仅可以作为 Cross-Scene Binder,还可以用于 管理 Action Clip 的引用

创建新的 Animation Data

打开 Assets 菜单,选择 Create -> Sequine -> Animation Data。将文件命名为能代表场景中对象或角色的名称。

Create a New Animation Data

在 Inspector 中可以看到,Animation Data 有一个名为 Action Clips 的字段。这里我们使用 Action Clip 这个术语来区别普通的 Clip,其中 Action Clip 是通过一个 Id 来引用,而不是直接引用动画资源。

Animation Data Inspector

尝试添加一些新的条目,每个条目都会有两个字段:

  • Id:用于引用该动画的自动生成整数 ID。当我们添加新条目时,它会自动递增生成。
  • Clip:被引用的 Animation Clip。

Animation Data

当在脚本或 Sequine Flow 中使用 Action Clips 时,我们通过指定 Id 来播放,而不是直接指定动画资源。这样,当我们需要更换某个动画时,只需在 Animation Data 中修改 Clip,而不必去修改所有 Command 中指定的动画。

指定 Animation Data

当 Animation Data 资源配置完成后,需要将它指定到 Sequine Player 组件上。

Assign the Animation Data

通过脚本播放 Action Clip

创建新脚本

要播放 Action Clip,我们不再使用 PlayAnimationClip 方法,而是改用 PlayAction 方法。

using UnityEngine;
using Calcatz.Sequine;

public class PlayOnStart : MonoBehaviour {

public SequinePlayer sequinePlayer;

public int idToPlay = 1;

void Start() {
sequinePlayer.PlayAction(idToPlay, SequinePlayer.defaultAnimationConfig);
}

}

使用 PlayAction 方法时,至少需要填写两个参数:

  • Action ClipId
  • Animation Config:可以配置动画的速度、过渡时间等

该方法与 PlayAnimationClip 基本相同,只是第一个参数不再是 AnimationClip 对象,而是 Action Clip 的整数 Id

在 Sequine Flow 中播放 Action Clip

Sequine Flow 中播放 Action Clip 时,我们不使用 Play Animation Clip Command,而是使用 Play Action Animation Command。

创建 Play Action Animation Command

在空白区域右键,选择 Animation -> Clip Control -> Play Action Animation。

Create a Play Action Animation Command

可以注意到,它与 Play Animation Clip Command 基本相同,只不过原本的 Clip 字段变成了一个 Action 下拉菜单。

Play Action Animation Command

当你在 Animation Data 中修改所引用的 Clip 时,所有引用该 IdAction Clip 的 Command 都会自动引用新的 Clip。例如这里,我们将 Id2 的动作从 Walk 改为了 Sleep

Referencing Action Clip

你也可以尝试修改已有 Action ClipId。在下面的示例中,原本为 2Id 被改为 6。这时你会看到所有引用 Id2 的 Command 都变成了红色,表示 Action Clip 引用丢失

Missing Action Clip

自 1.3.0 版本起,我们还可以先通过 Get Action Clip Command 获取 Action 的 Animation Clip,然后将其作为输入传递给 Play Animation Clip Command 的 Clip in-point。

Get Action Clip