NarraLeaf

变量

声明变量、读取变量、写入变量,以及访问 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(获取变量)读取当前蓝图够得到的变量。它是纯节点,所以完全没有执行引脚:它不是链上的一步,而是一个被读取时才求值的值

引脚方向类型说明
valueout · dataany按所选变量的类型投影

卡上字段

字段说明
variableId要读取的变量。下拉列出当前蓝图够得到的全部变量;同名项会带上作用域提示

Set Var

blueprint.local.set

Set Var(设置变量)写入当前蓝图够得到的变量,然后从next继续

引脚方向类型说明
inin · exec—
nextout · exec—
valuein · dataany按所选变量的类型投影

卡上字段

字段说明
variableId要写入的变量

Get Persistent

blueprint.persistent.get · Latent

Get Persistent(获取持久变量)从宿主管理的存储中读取项目级 Persistent 变量。它是 latent 节点,因为那份存储是异步的;也正因如此它是执行节点而不是纯读取——它站在链上,读到结果后把值发到value上。该变量还没有存过值时,你拿到的是它在定义中写下的默认值,而不是空值

引脚方向类型说明
inin · exec—
nextout · exec—
valueout · dataany已保存的值,或该变量的默认值。投影为所选变量的类型

卡上字段

字段说明
persistentVariableId要读取的 Persistent 变量

Set Persistent

blueprint.persistent.set · Latent

Set Persistent(设置持久变量)经宿主管理的存储写入 Persistent 变量,然后从next继续。写入是被等待的,所以走到next就意味着值已经落盘

引脚方向类型说明
inin · exec—
nextout · exec—
valuein · dataany要保存的值。投影为所选变量的类型

卡上字段

字段说明
persistentVariableId要写入的 Persistent 变量

Get Scene Var

blueprint.scene.get

Get Scene Var(获取场景变量)从运行中剧情的场景局部存储读取一个 Scene 变量。注意它带执行引脚:和Get Var不同,剧情变量读取是链上的一步,value只有在next之后才有意义

引脚方向类型说明
inin · exec—
nextout · exec—
valueout · dataany该变量的当前值

卡上字段

字段说明
sceneVariableId要读取的 Scene 变量

Set Scene Var

blueprint.scene.set

Set Scene Var(设置场景变量)写入一个 Scene 变量,然后从next继续

引脚方向类型说明
inin · exec—
nextout · exec—
valuein · dataany要写入的值

卡上字段

字段说明
sceneVariableId要写入的 Scene 变量

Get Saved Var

blueprint.saved.get

Get Saved Var(获取存档变量)从运行中的游戏的存档存储读取一个 Saved 变量,也就是存档文件会带走的那一份。界面可以在任何游戏开始之前读取它,例如在标题画面上:这时value是该变量声明的默认值,found为false

在 Blueprint Value 中,变量每次被写入,控件都显示新值:写入可以来自故事中的行、界面的蓝图,或读取存档

引脚方向类型说明
inin · exec—
nextout · exec—
valueout · dataany该变量的当前值;found为false时是它声明的默认值。投影为变量声明的类型
foundout · databoolean没有运行中的游戏持有该变量时为false。在 Story Action 蓝图里恒为true

卡上字段

字段说明
savedVariableId要读取的 Saved 变量

Set Saved Var

blueprint.saved.set

Set Saved Var(设置存档变量)写入一个 Saved 变量,然后从next继续

在 Story Action 蓝图之外,它写入运行中的游戏;没有游戏在运行、该变量未声明,或者值无法存进存档时,它会失败。写入的值会出现在下一次存档里。剧情的撤销不会撤回这次写入,屏幕上已经显示的剧情内容也不会因此改变

引脚方向类型说明
inin · exec—
nextout · exec—
valuein · dataany要写入的值。投影为变量声明的类型

卡上字段

字段说明
savedVariableId要写入的 Saved 变量

本页目录