CommandGraph
驱动 NPC 与事件行为的基于节点的可视化脚本系统——对话、分支、发放物品/金钱、传送、对战、任务
等等。每个可交互的角色都拥有一个 ActorCommandGraph;图在编辑器中编写,运行时作为协程执行。
Namespace: OpenMon.MCE.Actors.CommandGraph
在编辑器中编写,在运行时执行
通常你在可视化编辑器中构建命令图(见
CommandGraph 指南),而非从 C# 构建。下面的运行时表层是
你用自定义节点扩展系统或以编程方式运行图时会接触的部分。节点类型本身(ShowDialog、
GivePlayerItem、TeleportPlayer 等)是已编写的资产:其字段在检视器中序列化,并非面向代码的
API。
ActorCommandGraph
单个角色的图的容器。
[Serializable]
public class ActorCommandGraph
{
public bool IsRunning { get; }
[SerializeReference] public CommandNode RootNode;
[SerializeReference] public List<CommandNode> Nodes;
public bool IsGraphEmpty { get; }
public IEnumerator Run(CommandParameterData parameterData,
Action<bool> onLoopRunningUpdatedCallback = null);
public CommandNode CreateNode(Type type, Vector2 position = default);
public void DeleteNode(CommandNode node);
public void ConnectNodes(CommandNode parent, CommandNode child, int parentIndex);
public void RemoveConnection(CommandNode parent, CommandNode child, int parentIndex);
public List<CommandNode> GetChildren(CommandNode node);
}
IsRunning
此图当前是否正在执行。
类型: bool(只读)
RootNode
执行开始处的入口 CommandNode(一个 RootNode)。按引用序列化,使多态节点类型能够往返。
类型: CommandNode
Nodes
图中的所有节点,包括从 RootNode 无法到达的节点(保留下来以便编辑器能持久化孤立/未连接的
节点)。
类型: List<CommandNode>
IsGraphEmpty
当没有 根节点或根节点没有子节点时为 true。
类型: bool(只读)
Run(CommandParameterData parameterData, Action<bool> onLoopRunningUpdatedCallback = null)
执行图。设置 IsRunning,然后运行 RootNode.RunCommandAndContinue,将一个
CommandParameterData 上下文贯穿到每个节点。
返回: IEnumerator——从协程中 yield 它。
CreateNode(Type type, Vector2 position = default) / DeleteNode / ConnectNodes / RemoveConnection
面向编辑器的图变更:实例化某个 CommandNode 子类的节点、删除它、按输出端口索引连接/断开
父→子连接。