概览 - Sequine Flow
Sequine Flow 是一个按照预定义的可分支流程执行一组 Command 的系统,执行从 Start Command 开始。
界面概览

Left Pane
- Local Variables:用于添加在当前流程中使用的局部变量。
- Command List: :当前流程中包含的所有 Command 列表。你可以按 Command 类型筛选,或通过关键字搜索。点击某个条目后,会定位到其在 Command Nodes 中的具体位置。
Nodes Area
- Command Nodes:定义 Command 执行流程的主要区域。
- Create Command Context Menu:用于创建新的 Command。你可以在空白区域右键打开该菜单,或在点击某个 Command 的输出端口后左键点击空白区域,系统会自动创建并连接到对应的输入端口。
Sequine Flow 的对象类型
虽然 Sequine Flow 数据可以实现到任何 Unity 对象中,下面是我们已经提供的几种类型:
1. Sequine Flow Asset
Sequine Flow Asset 是一个存储 Sequine Flow 数据的资源文件,位于 Project 窗口中。
创建方式:打开 Assets 菜单,选择 Create -> Sequine -> Sequine Flow Asset。
双击该资源即可打开编辑器。
如需执行它,需要先在场景中创建一个执行器 GameObject。 打开 GameObject 菜单,选择 Create Other -> Sequine -> Sequine Flow Executor。

在 C# 脚本中,你可以从 Sequine Flow Executor 组件调用 Execute 方法,并将 Sequine Flow Asset 作为参数传入。
或者勾选 Execute On Start 并指定 Flow To Execute,即可在 Start 时自动执行,无需额外 C# 脚本。
可以启用 Don't Destroy on Load,使其在加载新场景时不被销毁。如果你使用 Scene 相关 Command,并且流程跨多个场景运行,可能会需要该选项。
2. Sequine Flow Clip (Timeline)
Sequine Flow Clip 是一个携带 Sequine Flow 数据的 Timeline Clip。
在创建 Clip 之前,需要先在 Timeline 中添加 Timeline Command Track。 在 Timeline 窗口中选中已有 Timeline,点击 + 按钮 -> Calcatz.CookieCutter -> Timeline Command Track。

然后在轨道空白区域右键,选择 Add Sequine Flow Clip。

无需单独创建执行器,因为 该 Clip 本身就是执行器。 当 Playable Director 播放到该 Clip 的起始时间时,对应的 Sequine Flow 将自动执行。
3. Sequine Flow Component
Sequine Flow Component 是一个携带 Sequine Flow 数据的组件。
创建方式:打开 GameObject 菜单,选择 Create Other -> Sequine -> Sequine Flow Component。
在 Inspector 中展开预览区域即可打开编辑器。 如需更大的编辑界面,可以点击 Open in Command Inspector 按钮,在独立窗口中打开。

无需创建执行器,因为 Sequine Flow Component 本身就是执行器。
使用 C# 脚本,你可以从该 Sequine Flow Component 调用 Execute 方法。或者,你也可以直接勾选 Execute On Start,它将在 Start 时立即自行执行,而无需额外的 C# 脚本。
我们可以启用 Don't Destroy on Load,使其在加载另一个场景时不会被销毁。如果你需要使用 Scene 相关 Command,并且有一个跨多个场景运行的流程,可能会需要这样做。
Sequine 使用 Odin Serializer 对 Sequine Flow 进行序列化,而它不支持 nested prefab。因此请确保不要在 nested prefab 中使用 Sequine Flow Component。不过,这种限制 不适用于 Sequine Flow Asset 和 Sequine Flow Clip。
补充说明
Sequine Flow 设计为快速执行,并且尽量减少内存分配,在大多数情况下甚至可以做到零分配。这意味着一个 Sequine Flow 对象在 同一时间只能被执行一次。如果在其已经运行时再次执行,可能会由于竞态条件而触发不可预期的行为,例如当某个异步 Command 尚未完成时被再次执行。
但是,如果你需要 同一个 Sequine Flow 对象的多个实例 同时执行,你可以改为使用 Instantiate 实例化该 Sequine Flow 对象后再执行。