实体 (Entities)
实体是在 场景 (Scene) 中(如节点、资源)或跨场景(如插件)持续存在的对象。在 Warudo 中编写脚本就是定义你自己的实体类型并与 Warudo 主窗口场景交互。你可以使用 Warudo 提供的基本类来定义自己的实体类:
- 节点: 继承
Node来创建新的节点。节点可自定义数据输入、数据输出、流输入、流输出和触发器。通过将节点从节点控制板拖到蓝图编辑器来实例化节点。(节点实例会与蓝图一同保存) - 资源: 继承
Asset来创建新的资源。资源类型可以定义数据输入和触发器。使用 添加资源 菜单实例化资源。(资源实例会与蓝图一同保存) - 插件: 继承
Plugin来创建新的插件。插件类型可以定义数据输入和触发器。当 Warudo 启动时或热重载插件时,将加载插件。每种插件类型只有一个插件实例,并且数据输入跨场景保存。 - 结构数据: 继承
StructuredData来创建新的结构数据。结构数据是一种复杂的数据类型,可用作节点、资源或插件中的“嵌入式”数据输入。
信息
在创建你的第一个脚本教程中,我们创建了一个名为 HelloWorldNode 的自定义节点和一个名为 的 CookieClickerAsset 自定义资源。
提示
实体的概念与 Unity 的 MonoBehaviour 大致相似,但采用了更规范易用的方式。
实体实例化后,Warudo 会自动为其分配一个 UUID(唯一标识符),此 UUID 用于标识场景中的实体,并与场景一起保存。你也可以通过 Id 属性获取 UUID。
实体类可以包含常规 C# 字段和方法。但是,要与 Warudo 主窗口场景交互,你需要在实体中创建端口和触发器。所有实体都可以具有数据输入端口(Data input)和触发器(Trigger),而节点还可以具有数据输出端口(Data output)、流输入端口(Fliw input)和流输出端口(Flow output)。


生命周期
实体的生命周期由多个阶段组成:
OnCreate(): 在创建实体时调用。你可以- 资源: 当用户将新资源添加到场景中时,或加载场景时调用。
- 节点: 当用户将新节点添加到蓝图中或加载场景时调用。节点始终在资源之后创建。
- 插件: 当 Warudo 在启动时加载插件或热重载插件时调用。
- 结构数据: 在创建父实体时调用,或者当用户将新的结构数据添加到结构数据数组时调用。
OnDestroy(): 在实体被销毁时调用。你可以在这里释放资源。- 资源: 当用户从场景中删除资源或卸载场景时调用。
- 节点: 当用户从蓝图中删除节点或卸载场景时调用 。节点总是在资源之后销毁。
Deserialize(TSerialized data): 实体从存档状态转出时调用。例如,当刚刚打开并加载场景时,将对资源调用此方法。你通常不需要调用此方法。Serialize(): 当实体需要转为存档状态时调用。例如,当场景即将保存或需要发送到编辑器时,将对资源调用此方法。你通常不需要调用此方法。
资源、节点和插件拥有另外几个生命周期阶段:
OnUpdate(): 在实体未销毁时每一帧调用。这类似于 Unity 的Update()方法。OnPreUpdate()和OnPostUpdate()分布在OnUpdate()之前和之后调用。
OnLateUpdate(): 在OnUpdate()之后的每一帧调用。这类似于 Unity 的LateUpdate()方法。OnFixedUpdate(): 在每个固定帧调用。这类似于 Unity 的FixedUpdate()方法。OnEndOfFrame(): 在帧末调用。这类似于使用 Unity 的WaitForEndOfFrame。OnDrawGizmos(): 当实体应绘制 Gizmo 时调用。这类似于 Unity 的OnDrawGizmos()方法。
信息
更新遵循以下顺序:插件 → 资源 → 节点。
你可以重写 (override) 这些生命周期方法,以更方便地为实体增加自定义行为。例如,要在每一帧上运行某些内容,就可以重写 OnUpdate() 方法。