使用指南

核心概念 / 节点、引脚和连线

用可操作的语言解释节点、执行引脚、数据引脚、类型匹配和常见连线错误。

16

如果一张 Script Graph 是一段小小的文章,那么:

  • 节点 是名词和动词——它代表”是什么”或”做什么”。
  • 引脚 是标点——它决定别的节点能不能”跟”进来。
  • 连线 是句法——它说明先做什么、再做什么,值从哪里流到哪里。

理解这三样东西,几乎就理解了 Script Graph 的全部核心。

有两种线,别把它们混在一起

新人最常见的错觉是”线就是线”。其实工作流里有两种颜色截然不同的线,各自负责一件事:

线看什么解决什么问题
执行流通常从左到右,连接执行引脚决定「下一步执行哪个节点」
数据流连接字符串、数字、节点、组件、资产等数据引脚决定「某个输入值从哪里来」

执行流只管顺序,不传值;数据流只传值,不主动触发。一个节点想真正跑起来,通常两样都要有——从执行流被触达,并且它需要的数据都准备好了

想象一下做菜:执行流是”什么时候下锅”,数据流是”锅里放什么”。少一样都做不出菜。

一个最小例子

回到最经典的”加载事件 → 打印字符串”,其实里面藏着两件独立的事:

  1. 加载事件的执行输出接到打印字符串的执行输入 → 决定了”什么时候打印”。
  2. 打印字符串的文本输入填入 Hello Script Graph → 决定了”打印什么”。

只做第一步,节点会执行但没内容;只做第二步,节点根本不会被触发。缺一不可。

输入在左,输出在右

节点的引脚位置有一套统一约定:

  • 左侧引脚 = 输入:等着别人把执行或数据传进来。
  • 右侧引脚 = 输出:把执行或数据传给下一个节点。
  • 事件引脚:用来绑定回调,比如按钮点击、键盘输入、自定义事件。

一个输入引脚同一时间只接受一条同类型的线。你如果再接一条同类的,旧线通常会被替换或提示”不兼容”。这个设计是为了避免一个输入同时收到几个来源导致结果不确定——图会因此更好读,行为也更好预测。

默认值、连线值和执行时读取

很多输入引脚有两副面孔:它可以直接在面板里填默认值,也可以接一条数据线。理解这个双面性能省下很多”看着接了线却不生效”的调试时间:

输入状态执行时用什么
没接线,填了默认值使用面板里的默认值
接了线使用上游节点的输出
接了线,但上游输出为空使用空值,通常不会自动回退到默认值
类型不匹配连线失败,或编译时报类型错误

第三行特别容易踩坑:“我明明填了默认值,为什么还是空?“——因为你后来接了一条线,默认值就被顶替了。

另一个关键点:数据不是提前推送的,而是节点执行时”回头去问”上游要。也就是说:

查找节点
  → 输出 Node
获取 Button 组件
  → 执行时会读取查找节点的输出

如果查找路径写错,获取 Button 组件 才会拿到空值——这时你需要打印中间输出,而不是只看最后节点的现象。

类型匹配

数据线要求两端类型兼容。常见类型:

类型常见来源
字符串名称、路径、日志文本、场景名
数字坐标、速度、分数、时间
布尔值开关、条件判断结果
节点场景节点、查找结果、当前节点
组件Button、Label、Sprite、AudioSource 等
资产Prefab、SpriteFrame、AudioClip、SceneAsset
枚举状态、方向、品质、事件名
结构体一组字段组成的复合数据

如果线拉不上,先问两个问题:

  1. 两端类型是不是同一类?(Node 不能直接接到 Component,需要中间的”获取组件”节点)
  2. 是不是需要一个”桥梁节点”?(比如”构造结构体”、“枚举值”、“类型转换”)

常见连线错误

现象常见原因解法
节点不执行没有执行流接入从事件、函数入口或上游节点接一条执行线过来
数据为空只连了执行线,数据输入没有值给输入填默认值,或接一条数据线
线接不上两端类型不兼容换成同类型节点,或先用转换节点做桥接
分支永远走同一路条件输入没有变化打印条件值,看看数据是从哪儿来的
事件没响应只创建了事件节点,没绑定目标检查事件绑定节点,以及是否配对了解绑时机

新手搭图的推荐顺序

比”我先想清楚再一次搭完”更有效的做法是:每一步都能被观察

  1. 先放入口节点
  2. 接一个调试打印,确认入口能触发。
  3. 加入一条真实业务线
  4. 每接入一个条件、循环、或异步节点,就打印关键输入和输出
  5. 一切跑通后,再删掉那些临时打印。

这样即使某一步坏了,你能马上定位到”是刚才那两三个节点之一”。相反,如果你一次放十几个节点再运行,出错时几乎无法判断问题出在入口、数据、分支、异步完成、还是最终动作。

保持”每一步都有可观测的产出”,是所有可视化编程的黄金习惯。

继续阅读