变量
声明变量、读取变量、写入变量,以及访问 Persistent 存储与剧情存储的节点
一张图要碰变量,只能经由这些节点。有哪些作用域、各自活多久、什么能被存档带走,都在变量一页;这一页讲的是签名
约定
Get Var和Set Var的value引脚类型由所选变量投影而来。 引脚声明成any,但在卡片上它会取你在Variable里选中的那个变量的类型,编辑器的引脚标签、连线预览和 graph validation 都用这份投影结果- Persistent 与 Saved 两对节点的
value引脚同样按变量声明的类型投影。 数字变量的引脚是float,可以连到+等数字输入 - 之后改类型不会动你的连线。 改掉某个
Var的 Data type 后,已不再匹配的连线原地保留;graph validation 报告类型不匹配,而不是由编辑器悄悄删掉这条连线。重接哪一根由你决定 - Persistent 那一对是 latent(会挂起执行)节点。
Get Persistent和Set Persistent在读写完成前会挂起整张图,因此进不了 Blueprint Value、内联故事值和分支条件 - Blueprint Value 不能声明变量。
widgetValue宿主根本没有Var节点,但它仍然可以用Get Var和Set Var读写自己够得到的变量 - Scene 这两个节点属于 Story Action 蓝图。
Get Scene Var和Set Scene Var在别处都不提供。Saved 这一对提供给所有蓝图:在 Story Action 蓝图里它访问运行中的剧情,在其它地方访问运行中的游戏。Blueprint Value 中可以用Get Saved Var,不能用Set Saved Var;它显示的值随变量的每次写入更新
Var
blueprint.local.declareVar · Pure
Var(变量)是一次声明,不是执行链上的一步——也是这一页唯一没有引脚的节点。把它放在画布任意位置即可:运行时会在开始执行前收齐当前蓝图里的每一个Var,各个Variable下拉里列出的就是这些声明
卡上字段
| 字段 | 说明 |
|---|---|
name | 变量名,也就是各个Variable下拉里显示的名字 |
valueType | 数据类型:字符串(string)、整数(integer)、数字(float)、布尔值(boolean)、JSON(json)、列表(array)、计时器(Timer)、动画(AnimationToken)、任意值(any) |
defaultValue | 初始值。它会被深拷贝进变量 store,所以运行时改变量永远不会改到你写下的默认值 |
选择任意值(any)会把 Default 锁成一个禁用的null。任意值变量总是以null起步——没有类型可以据以给出一个像样的默认值。读它之前,先用Set Var赋一个值
Get Var
blueprint.local.get · Pure
Get Var(获取变量)读取当前蓝图够得到的变量。它是纯节点,所以完全没有执行引脚:它不是链上的一步,而是一个被读取时才求值的值
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
value | out · data | any | 按所选变量的类型投影 |
卡上字段
| 字段 | 说明 |
|---|---|
variableId | 要读取的变量。下拉列出当前蓝图够得到的全部变量;同名项会带上作用域提示 |
Set Var
blueprint.local.set
Set Var(设置变量)写入当前蓝图够得到的变量,然后从next继续
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
in | in · exec | — | |
next | out · exec | — | |
value | in · data | any | 按所选变量的类型投影 |
卡上字段
| 字段 | 说明 |
|---|---|
variableId | 要写入的变量 |
Get Persistent
blueprint.persistent.get · Latent
Get Persistent(获取持久变量)从宿主管理的存储中读取项目级 Persistent 变量。它是 latent 节点,因为那份存储是异步的;也正因如此它是执行节点而不是纯读取——它站在链上,读到结果后把值发到value上。该变量还没有存过值时,你拿到的是它在定义中写下的默认值,而不是空值
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
in | in · exec | — | |
next | out · exec | — | |
value | out · data | any | 已保存的值,或该变量的默认值。投影为所选变量的类型 |
卡上字段
| 字段 | 说明 |
|---|---|
persistentVariableId | 要读取的 Persistent 变量 |
Set Persistent
blueprint.persistent.set · Latent
Set Persistent(设置持久变量)经宿主管理的存储写入 Persistent 变量,然后从next继续。写入是被等待的,所以走到next就意味着值已经落盘
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
in | in · exec | — | |
next | out · exec | — | |
value | in · data | any | 要保存的值。投影为所选变量的类型 |
卡上字段
| 字段 | 说明 |
|---|---|
persistentVariableId | 要写入的 Persistent 变量 |
Get Scene Var
blueprint.scene.get
Get Scene Var(获取场景变量)从运行中剧情的场景局部存储读取一个 Scene 变量。注意它带执行引脚:和Get Var不同,剧情变量读取是链上的一步,value只有在next之后才有意义
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
in | in · exec | — | |
next | out · exec | — | |
value | out · data | any | 该变量的当前值 |
卡上字段
| 字段 | 说明 |
|---|---|
sceneVariableId | 要读取的 Scene 变量 |
Set Scene Var
blueprint.scene.set
Set Scene Var(设置场景变量)写入一个 Scene 变量,然后从next继续
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
in | in · exec | — | |
next | out · exec | — | |
value | in · data | any | 要写入的值 |
卡上字段
| 字段 | 说明 |
|---|---|
sceneVariableId | 要写入的 Scene 变量 |
Get Saved Var
blueprint.saved.get
Get Saved Var(获取存档变量)从运行中的游戏的存档存储读取一个 Saved 变量,也就是存档文件会带走的那一份。界面可以在任何游戏开始之前读取它,例如在标题画面上:这时value是该变量声明的默认值,found为false
在 Blueprint Value 中,变量每次被写入,控件都显示新值:写入可以来自故事中的行、界面的蓝图,或读取存档
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
in | in · exec | — | |
next | out · exec | — | |
value | out · data | any | 该变量的当前值;found为false时是它声明的默认值。投影为变量声明的类型 |
found | out · data | boolean | 没有运行中的游戏持有该变量时为false。在 Story Action 蓝图里恒为true |
卡上字段
| 字段 | 说明 |
|---|---|
savedVariableId | 要读取的 Saved 变量 |
Set Saved Var
blueprint.saved.set
Set Saved Var(设置存档变量)写入一个 Saved 变量,然后从next继续
在 Story Action 蓝图之外,它写入运行中的游戏;没有游戏在运行、该变量未声明,或者值无法存进存档时,它会失败。写入的值会出现在下一次存档里。剧情的撤销不会撤回这次写入,屏幕上已经显示的剧情内容也不会因此改变
| 引脚 | 方向 | 类型 | 说明 |
|---|---|---|---|
in | in · exec | — | |
next | out · exec | — | |
value | in · data | any | 要写入的值。投影为变量声明的类型 |
卡上字段
| 字段 | 说明 |
|---|---|
savedVariableId | 要写入的 Saved 变量 |