跨场景 (Cross-Scene) 系统
通常情况下,Unity 不允许将场景中的对象,例如 GameObject 或 Component,赋值到一个资源的属性中。Unity 甚至不允许将某个特定场景中的对象赋值到另一个不同场景对象的属性中。
问题在于,在 Sequine Flow 中,一些 Command 需要访问场景中的组件才能执行,例如 Sequine Player 组件、Sequine Text 组件,或 Transform 组件。
Cross-Scene 系统正是希奎引 免受这一限制影响 的关键机制,使我们能够指定任意场景中的对象作为目标。
在 Sequine Flow 中,我们有 3 种方式可以指定场景中的对象:
- Direct Object
- Cross Scene Reference
- Cross Scene Binding (Legacy)
如果你已经通过 Sequine Player 和 Sequine Text 的快速开始学习过,那么你已经见过如何指定场景对象作为目标。
1. Direct Object
顾名思义,这是一种直接指定场景对象的方式,就像在 Inspector 中将一个组件引用赋值给另一个组件的属性一样,没有任何特殊之处。

但是,这种方式仅适用于 Sequine Flow Component。 我们前面提到的限制,仅针对在资源中或跨场景为对象赋值的情况。因此,在同一个场景内 为对象赋值是 没有问题的。
Sequine Flow Component 本身是添加在 GameObject 上的组件,而 GameObject 显然存在于某个场景中,因此它可以感知同一场景中的其他组件。 不过,该限制仍然适用于来自不同场景的组件,因此你 不应该 指定来自 不同场景 的目标。
其他类型的 Sequine Flow,例如 Sequine Flow Asset 和 Sequine Flow Clip,都属于资源类型。它们无法使用 Direct Object 来指定场景对象。如果尝试选择 Direct Object,将会显示错误信息。

2. Cross-Scene Reference
这是一种可以指定任意场景对象的方式。与 Direct Object 相比,在赋值方式上没有区别,你仍然可以像往常一样拖拽对象进行赋值。
其背后的机制是,实际存储的数据并不是对象引用本身,而是由 Sequine 为该对象生成的唯一 GUID。该 GUID 信息会显示在对象字段下方。

当指定的目标 有效 时,对象字段颜色为 绿色;当目标 无效 时,颜色会变为 红色。 无效目标通常是指未找到对应 GUID 的对象,主要原因是对象已被删除。

当所属场景未打开时,对象字段会显示 None,但仍然为绿色。这是正常现象。只要颜色是绿色,就表示引用有效,并且在运行时可以正常执行。

我们也可以点击 ... 按钮,直接手动指定 GUID。

3. Cross-Scene Binding (Legacy)
该方案用于 1.3.2 及更早版本。保留该功能是为了兼容长期用户。 如果这是你第一次使用希奎引,建议改用 Cross-Scene Reference,因为它更加高效且更简单,几乎与 Direct Object 没有使用差异。你也可以直接跳到下一页。
Cross-Scene Binding 的基本思路基于以下前提:
- 我们无法从资源或其他场景访问当前场景中的对象
- 我们可以从任何地方访问资源
- 我们可以在组件中指定一个资源
结合这些前提,我们可以使用一个 资源 作为某个 组件 的 身份标识,从而进行 引用。
具体做法是,在我们希望作为目标的 GameObject 上添加一个 Cross Scene Binder 组件。 首先指定 Binder 资源,该资源可以是任意类型的资源。 然后选择该 GameObject 上需要绑定的组件。

Cross Scene Binder 组件的初始状态 必须是启用状态。如果你希望在 Awake 时禁用该 GameObject,可以勾选 Deactivate GameObject on Awake。
虽然我们可以使用任意类型的资源作为 Binder 资源,但我们也提供了一种特殊类型的资源,称为 Cross Scene Binder Asset。它本质上是一个空的 ScriptableObject,唯一用途就是作为 Binder 资源。
不过需要注意,Binder 资源不一定必须是 Cross Scene Binder Asset。
要创建 Cross Scene Binder Asset,打开 Assets 菜单,点击 Create -> Sequine -> Cross Scene Binder Asset。
然后我们可以在 Binder Asset 字段中指定刚刚创建的 Cross Scene Binder Asset。 在 Component to Bind 字段中,可以通过拖拽组件或使用下拉菜单进行选择。

你可以在 Component to Bind 字段中指定任意类型的组件,因此请确保 拖拽的是正确的组件,或使用 Select Component 下拉菜单进行选择。
除了手动创建 Cross Scene Binder Asset,你也可以点击 Binder Asset 字段下的 New 按钮来立即生成。
在 Command 中,不再直接为目标字段指定对象或组件,而是指定对应的 Binder 资源。

在为 Target's Binder 字段赋值时,可以直接拖拽 GameObject,系统会自动从该 GameObject 上的 Cross Scene Binder 组件中获取并指定对应的 Binder Asset。
如果项目中大量使用跨场景对象,Cross-Scene Binding (Legacy) 的扩展性较差,因为项目中会产生大量 Binder 资源。这也是推荐使用 Cross-Scene Reference 的原因。