NarraLeaf
蓝图

蓝图

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

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

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

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

在放下第一个节点之前,每份蓝图都先回答三个问题:谁是它的宿主、它是哪种图类型,以及由此决定的——创建浮窗会给你哪些节点

宿主

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

宿主归属于存活时长
globalMain项目整个应用
surfaceMain单个 Surface该 Surface 实例
widgetMain单个控件实例该控件实例
widgetValue单个控件的单个属性拥有它的绑定
componentWidgetMain可复用的组件控件组件的每个实例
sharedAsset共享蓝图资源引用它的一方
storyAction一张故事蓝图,处于 actionvaluecondition 模式调用它的那一行

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

图类型

每张图都声明自己的图类型,而图类型是一套规则,不是一个标签

类型副作用节点入口节点可从控件 UI 绑定
event允许事件头(InitOn Click……);非强制
function不允许Function Entry,必需
macro允许不需要

latent(会挂起执行)节点——例如 Delay 或一次存档写入——不能出现在 function 图中。函数要同步把结果返回给调用方,没有地方安放一个待定的结果

Blueprint Value

Blueprint Value 是绑定到单个属性上的 widgetValue 蓝图,属性因此由计算得出而非直接填写。当前支持的目标是 nl.textprops.textnl.buttonprops.labelnl.frameprops.paramsnl.sliderprops.value

它的创建浮窗被刻意收窄:事件头、非 latent 的流程节点、纯 Data 与 Math、本地变量读写、Element 字面量,以及纯读取节点。没有改写、没有导航、没有持久变量、没有 latent 节点。一个能改变世界的取值器,会在世界改变的那一刻重新进入自己

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

接下来

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

本页目录