NarraLeaf
蓝图

蓝图

可视化编程层——什么是蓝图、一份蓝图归属于谁,以及它被允许做什么

蓝图是一份可视化程序:节点由连线串起,由游戏运行时执行。项目靠蓝图获得行为而不必写代码——打开某个界面的按钮、列出存档的菜单、知道有没有进度可以继续的标题画面

填满一个槽位的方式不止蓝图一种。一个槽位装的是一份图层列表,其中一层也可以是脚本——项目自己拥有、在 Studio 之外编辑的 TypeScript 文件。每一层都会运行,所以同一个槽位里脚本可以和图并存。脚本讲的是这些文件放在哪里、一个脚本又是从哪里进入的

编辑器中打开的应用逻辑蓝图:两个节点由一条连线相接,旁边列出该图的图层与变量

在放下第一个节点之前,每份蓝图都先回答一个问题:谁是它的宿主。答案决定了创建浮窗会给你哪些节点

宿主

宿主决定蓝图归属何处,也决定它的生命周期和可触及的范围

宿主归属于存活时长
globalMain项目,在 UI 面板中显示为应用逻辑,早期版本称作全局蓝图整个应用
surfaceMain单个 Surface该 Surface 实例
widgetMain单个控件实例该控件实例
widgetValue单个控件的单个属性拥有它的绑定
componentWidgetMain可复用的组件控件组件的每个实例
storyAction一张故事蓝图,处于 action、value 或 condition 模式调用它的那一行

widgetMain 蓝图通过 Self 节点操作自己所属的控件,这类节点没有 Element 输入。要操作别的控件,则把一个 Element 引用接进 Element 节点。这条区分贯穿整个节点目录,也是理解创建浮窗的第一件事

Blueprint Value

Blueprint Value 是绑定到单个属性上的 widgetValue 蓝图,属性因此由计算得出而非直接填写。当前支持的目标是 nl.text → props.text、nl.button → props.label、nl.image → props.imageFill.assetId、nl.switch → props.checked、nl.frame → props.params、nl.slider → props.value

它的创建浮窗被刻意收窄:Init 与 On Flush 两个事件头、非 latent 的流程节点、纯 Data 与 Math、本地变量读写、Element 字面量,以及纯读取节点。没有改写、没有导航、没有持久变量,除 Call Fn 以外也没有 latent 节点(会挂起整张图的节点,例如 Delay 或一次存档写入)。一个能改变世界的取值器,会在世界改变的那一刻重新进入自己

要显示玩家语言中的文字,用 Translation Key Text 取翻译键的文字,再用 Format 把值填进去。读取玩家语言的 Blueprint Value 会在玩家切换语言时更新,无论它是通过 Translation Key Text 或按语言区分的资产读取,还是通过它调用的函数里的 Get Text、Get Current Language 或 Get Save Metadata 读取

文本的内容或按钮的文字绑定之后,控件自身的文字是示例文字:只在编辑器中显示,不进入构建出的游戏,也不参与翻译。见界面文本

编辑器画布是排版工具。它会解析蓝图到足以预览一个值绑定的程度,但并不运行游戏——需要活动游玩的节点在那里没有对话对象。蓝图行为请在开发模式中验证

接下来

若要发布自己的节点而非使用内置节点,参见插件 API 的 blueprintNodes

本页目录