跳到主要内容

Global Variables

Global Variables(全局变量值)本质上与 Variables 相同,但它们可以被全局访问和共享,不受限于 某个 Sequine Flow 对象的 作用域

整个 Global Variables 可以被序列化为二进制数据。因此,我们也可以利用这一点将其保存到文件中,甚至将其作为存档数据使用。

我们可以在 Sequine Global Data 窗口中查看所有的 Global Variables 列表。要打开该窗口,在菜单栏中点击 Tools -> Sequine -> Global Data...

Open Global Data

Global Data

创建 Global Variable

要创建一个 Global Variable,可以点击 Add New Variable 折叠栏来打开变量创建菜单。需要指定变量名称和数据类型。

Create Global Variable

点击 Add 按钮后,变量会出现在表格中,在那里可以重命名变量并修改初始值。

Created Global Variable

使用 Global Variable

我们可以通过创建 Command 的上下文菜单(在空白区域右键)为某个 Global Variable 创建 GetterSetter Command。

1. Getter

要创建一个获取 Global Variable 的 Property Command,在空白区域右键,选择 Property -> Data -> Global Variable。

Get Global Variable

默认情况下,该 Command 会显示一个空的下拉菜单。点击下拉菜单,可以选择它要引用的变量。

Get Global Variable Blank

请注意,out-point 的颜色会根据变量所引用的数据类型自动改变。

Get Global Variable Clicked

下面是一个将变量值打印到控制台的示例。

Use Global Variable

通过脚本获取 Global Variable

可以使用 SequineGlobalData 类并调用 GetVariable 方法,通过指定返回类型和变量 ID 来获取全局变量。变量 ID 是在 Sequine Global Data 窗口中变量名称旁显示的整数。

SequineGlobalData.GetVariable<float>(1);

自 1.7.2 版本起,也可以通过变量名称获取全局变量值。

SequineGlobalData.GetVariable<float>("MyGlobalFloat");

参见 SequineGlobalData.

2. Setter

要创建一个设置 Global Variable 的 Main Command,在空白区域右键,选择 Data -> Set Global Variable。

Set Global Variable

默认情况下,Set Global Variable Command 会显示一个空的下拉菜单。点击下拉菜单,可以选择它要引用的变量。

Set Global Variable Blank

当选择具体变量后,会显示其 in-point、字段以及 out-point

Set Global Variable Clicked

和普通 Variable 一样,如果希望动态设置值,而不是手动填写字段,可以将该 in-point 连接到其他 Command 的某个 out-point

Use Global Variable Clicked

通过脚本设置 Global Variable

可以使用 SequineGlobalData 类并调用 SetVariable 方法,通过指定返回类型、变量 ID 以及要设置的值来修改全局变量。变量 ID 是在 Sequine Global Data 窗口中变量名称旁显示的整数。

SequineGlobalData.SetVariable<float>(1, 50f);

自 1.7.2 版本起,也可以通过变量名称设置全局变量值。

SequineGlobalData.SetVariable<float>("MyGlobalFloat", 50f);

参见 SequineGlobalData.

序列化 Global Data

如前所述,Global Variables 的状态可以在运行时进行序列化和反序列化。它的实现方式是对 Sequine Global Data 对象中包含的数据进行序列化。

序列化数据只需调用 SequineGlobalData.SerializeToBinary() 方法。反序列化则需要调用 SequineGlobalData.DeserializeFromBinary(bytes)。

下面是一个示例,演示如何创建一个 DataManager,通过按 Ctrl+S 将当前状态保存到文件,通过按 Ctrl+L 将文件加载到当前状态。


using Calcatz.Sequine;
using UnityEngine;
using System.IO;

public class DataManagerExample : MonoBehaviour {

private void Update() {
if (Input.GetKey(KeyCode.LeftControl)) {

if (Input.GetKeyDown(KeyCode.S)) {
SaveData();
}

if (Input.GetKeyDown(KeyCode.L)) {
LoadData();
}

}
}

private void SaveData() {
string filePath = Application.persistentDataPath + "/SaveData.dat";
byte[] bytes = SequineGlobalData.SerializeToBinary();
File.WriteAllBytes(filePath, bytes);
Debug.Log("Saved to " + filePath);
}

private void LoadData() {
string filePath = Application.persistentDataPath + "/SaveData.dat";
byte[] bytes = File.ReadAllBytes(filePath);
SequineGlobalData.DeserializeFromBinary(bytes);
Debug.Log("Loaded from " + filePath);
}

}