Task 节点图示例

Task 示例展示了一个完整的业务接入流程:编辑任务节点、导出 Runtime 图、显示任务面板,并根据完成或失败结果继续执行后续节点。

编辑器部分

Task 图包含:

  • TaskGraphAsset:Task 图资产。
  • TaskGraphController:指定 Runtime 导出目录 Assets/Resources/TaskGraphs
  • TaskGraphWindow:注册 Tools/Node Graph/Task/Create Task Graph 创建入口。
  • TaskNode:定义 Incompletefailed 端口。
  • TaskNodeView:编辑 TaskNodeData 的任务名称和描述。

任务节点的出口含义:

端口 key 含义
complete 任务完成后的下一节点
failed 任务失败后的下一节点

运行时入口

TaskGraphExampleRunner 只负责:

  1. 创建 TaskPanel
  2. 从 Resources 加载 Task 图。
  3. TaskPanel 注入每一个 TaskRuntimeNode
  4. 调用 GraphRunner.Start() 启动图。
1
2
3
4
5
6
7
8
9
10
11
12
graphRunner = GraphRuntimeManager.Instance
.LoadFromResources(resourcesPath);

foreach (INodeGraphRuntimeNode node in graphRunner.Nodes)
{
if (node is TaskRuntimeNode taskNode)
{
taskNode.SetPanel(taskPanel);
}
}

graphRunner.Start();

TaskRuntimeNode 驱动业务

TaskRuntimeNode.OnEnter() 负责设置面板回调并刷新任务信息:

1
2
3
4
5
6
panel.SetCallbacks(this);
panel.Refresh(
string.IsNullOrEmpty(UserData.name) ? Title : UserData.name,
UserData.description,
HasExit("complete"),
HasExit("failed"));

TaskPanel 的完成和失败按钮通过 ITaskPanelCallbacks 回调到当前 RuntimeNode:

1
2
3
4
5
TaskPanel Button
-> TaskRuntimeNode.OnComplete / OnFail
-> SelectExit("complete" / "failed")
-> GraphRunner.MoveNext
-> 下一个节点 OnEnter

这保证 UI 只负责展示和触发事件,节点本身决定业务流转。

TaskPanel View

TaskPanel 位于 Examples/Task/View,负责:

  • 查找任务名称和描述文本。
  • 控制完成、失败按钮显示。
  • 绑定按钮事件。
  • 显示和隐藏面板。

它不直接操作 GraphRunner,也不决定跳转出口。

nodeRuntime

完整使用流程

  1. 在菜单中创建 Task Graph。
  2. 添加 Task 节点并配置名称、描述和连线。
  3. 保存图资产。
  4. 点击 Export .bytes,生成 Resources 下的运行时图数据。
  5. 场景中挂载 TaskGraphExampleRunner 和 TaskPanel Prefab。
  6. 配置 resourcesPath,例如 TaskGraphs/NewGraph0
  7. 进入 Play Mode,TaskPanel 会在 TaskRuntimeNode 进入时显示。