使用指南
问题诊断 / 编译、运行和日志排查
按文件、入口、编译、组件挂接、日志和节点错误的顺序排查 Script Graph 常见问题。
16
遇到“没有反应”“编译失败”“运行结果不对”时,不要先改一大片节点。按下面顺序排查,通常能很快缩小范围。
排查原则
先判断问题属于哪一层,再动手改节点:
| 层级 | 典型问题 | 最小验证方式 |
|---|---|---|
| 文件层 | .sgw 类型不对、没有保存、没有编译 | 单文件保存并编译 |
| 入口层 | 生命周期或事件没有触发 | 入口后直接接打印 |
| 数据层 | 查找节点、组件、资产、枚举或结构体为空 | 打印每个关键输出 |
| 运行层 | 分支、异步、场景切换或资源加载失败 | 打印分支条件和完成出口 |
不要跨层排查。例如入口打印都没有出现时,先不要怀疑场景加载节点;数据还没打印确认时,也不要先改后面的业务分支。
1. 先确认文件和入口
| 检查项 | 说明 |
|---|---|
.sgw 类型 | 能挂场景节点的逻辑应是组件类型 |
| 入口节点 | 加载、启动、更新、事件绑定、函数入口至少要有一个 |
| 执行线 | 入口必须连到后续节点 |
| 保存状态 | 修改后先保存,再编译或运行 |
最小确认方式:入口后面直接接“打印字符串”。
2. 确认编译结果
组件工作流需要编译后才能挂接到场景节点。编译时重点看:
- 是否提示具体节点错误。
- 是否提示类型不兼容。
- 是否提示缺少目标资产、枚举、结构体或类。
- 是否生成了组件文件。
如果项目里有很多 .sgw,可以从菜单进入“批量编译”,先筛出哪几个文件失败,再逐个打开修。
3. 确认组件是否挂接
组件工作流编译成功并不等于已经运行。还需要:
- 生成组件存在。
- 组件挂到了当前场景中的节点。
- 当前场景确实在预览或构建中运行。
- 组件所在节点没有被禁用。
如果加载事件没有打印,优先检查挂接和节点启用状态。
4. 调整日志过滤级别
Script Graph 支持日志过滤级别。排查时建议先让日志尽量完整,确认路径后再收紧。
| 目标 | 建议 |
|---|---|
| 看用户调试输出 | 使用打印字符串,并确认日志没有被过滤 |
| 看关键运行信息 | 临时调高日志可见级别 |
| 发布前减少噪声 | 清理临时打印,保留必要告警 |
如果你正在看 Cocos Creator 的日志文件,可以搜索 .sgw 文件名、节点名称、错误提示关键词和 Script Graph。
5. 按节点边界切问题
复杂工作流不要只看最终结果。把问题拆成节点边界:
- 打印入口是否触发。
- 打印关键输入。
- 打印关键输出。
- 打印分支条件。
- 打印异步完成出口。
这样可以区分:
- 入口没触发。
- 触发了但数据为空。
- 数据正确但分支走错。
- 分支正确但下游节点失败。
- 异步节点未完成或接错出口。
6. 常见错误表
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 打印节点没输出 | 入口没触发、组件没挂、日志被过滤 | 直接在入口后接打印,检查挂接和日志级别 |
| 编译失败 | 节点不支持当前 Flow、类型不兼容、引用失效 | 按错误提示定位节点,先修第一条错误 |
| 运行时报空值 | 查找节点、获取组件或加载资产结果为空 | 打印每个中间输出 |
| 事件重复触发 | 多次绑定且未解绑 | 在禁用或销毁时清理绑定 |
| 资产加载失败 | 包名、路径、类型或构建设置不匹配 | 使用选择器,确认资源属于目标包 |
| 枚举分支不走 | 值不是预期枚举成员 | 打印枚举值,检查默认值和赋值节点 |
7. 什么时候用批量编译
适合这些场景:
- 修改了函数库、枚举、结构体或类,想确认影响范围。
- 发布前确认所有
.sgw都能生成。 - 关联插件或自定义节点变更后,想检查引用是否仍可用。
- 多个工作流依赖同一个数据结构。
批量编译失败时,先修最基础的类型文件,例如枚举、结构体、接口和类,再修依赖它们的组件工作流。
一个完整排查例子
现象:点击首页按钮后没有进入游戏场景。
推荐顺序:
- 在组件加载入口后接打印,确认
HomePanel.sgw已经运行。 - 在查找
StartButton后打印节点是否为空。 - 在获取 Button 组件后打印组件是否为空。
- 在按钮点击事件后打印
Start button clicked。 - 在场景加载前打印目标场景名。
- 确认
Game场景已经进入 Cocos 构建设置。 - 如果以上都正确,再看 Director 节点返回或日志中的具体错误。
这个例子里的关键点是:每一步只验证一个假设。这样不会把“按钮没有绑定”和“场景名错误”混成一个模糊问题。