GeWuYou a79f02c987 docs(api): 添加 Core API 参考文档与事件系统接口文档
- 新增 Core API 参考文档,涵盖架构与模块、数据模型与系统、命令与查询等核心组件
- 添加事件系统接口详细文档,包括 IEvent、IEventBus、IUnRegister 等接口说明
- 提供完整的 API 使用示例路径、最佳实践与性能建议
- 包含架构图、依赖关系图与故障排查指南
- 添加测试用例参考与扩展方法说明
- [skip ci]
2026-01-21 23:45:10 +08:00

16 KiB
Raw Blame History

Godot扩展功能

**本文引用的文件** - [NodeExtensions.cs](file://GFramework.Godot/extensions/NodeExtensions.cs) - [GodotPathExtensions.cs](file://GFramework.Godot/extensions/GodotPathExtensions.cs) - [SignalBuilder.cs](file://GFramework.Godot/extensions/signal/SignalBuilder.cs) - [SignalFluentExtensions.cs](file://GFramework.Godot/extensions/signal/SignalFluentExtensions.cs) - [UnRegisterExtension.cs](file://GFramework.Godot/extensions/UnRegisterExtension.cs) - [README.mdGodot扩展模块](file://GFramework.Godot/extensions/README.md) - [README.md信号连接系统](file://GFramework.Godot/extensions/signal/README.md) - [DefaultUnRegister.cs](file://GFramework.Core/events/DefaultUnRegister.cs) - [UnRegisterListExtension.cs](file://GFramework.Core/extensions/UnRegisterListExtension.cs) - [IUnRegister.cs](file://GFramework.Core.Abstractions/events/IUnRegister.cs) - [godot-api.md](file://docs/api-reference/godot-api.md)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向Godot扩展功能系统化梳理并说明以下能力

  • NodeExtensions节点生命周期、查找、父子关系、场景树控制、输入控制、调试工具与类型转换等扩展方法。
  • GodotPathExtensionsGodot虚拟路径res://、user://)识别与判断。
  • SignalBuilder与SignalFluentExtensions基于流畅API的信号连接构建器支持连接标志、连接后立即调用、链式调用与显式结束。
  • UnRegisterExtension在节点退出场景树时自动取消注册监听器配合事件生命周期管理。

文档提供架构图、序列图、流程图与最佳实践,帮助开发者高效、安全地使用这些扩展。

项目结构

Godot扩展模块位于GFramework.Godot工程下核心文件组织如下

  • extensions/NodeExtensions.cs节点操作扩展
  • extensions/GodotPathExtensions.cs路径判断扩展
  • extensions/signal/SignalBuilder.cs信号连接构建器
  • extensions/signal/SignalFluentExtensions.cs信号流畅API入口
  • extensions/UnRegisterExtension.cs事件生命周期扩展
  • extensions/README.md模块概览与示例
  • extensions/signal/README.md信号系统详细文档
graph TB
subgraph "Godot扩展模块"
A["extensions/NodeExtensions.cs"]
B["extensions/GodotPathExtensions.cs"]
C["extensions/signal/SignalFluentExtensions.cs"]
D["extensions/signal/SignalBuilder.cs"]
E["extensions/UnRegisterExtension.cs"]
end
C --> D
A --> |"使用"| A
B --> |"使用"| B
E --> |"使用"| E

图表来源

章节来源

核心组件

  • 节点扩展NodeExtensions提供安全释放、等待就绪、有效性检查、父子关系、场景树控制、输入控制、调试工具与类型转换等方法。
  • 路径扩展GodotPathExtensions提供res://与user://路径识别。
  • 信号扩展SignalFluentExtensions + SignalBuilder提供流畅的信号连接API支持标志、立即调用与链式调用。
  • 事件生命周期扩展UnRegisterExtension在节点退出场景树时自动取消注册监听器。

章节来源

架构总览

扩展模块围绕Godot对象与场景树展开形成“扩展方法层 → 构建器层 → 生命周期管理”的分层架构。

graph TB
GO["GodotObject/Node"] --> SF["SignalFluentExtensions<br/>创建SignalBuilder"]
SF --> SB["SignalBuilder<br/>WithFlags/To/ToAndCall/End"]
GO --> NE["NodeExtensions<br/>生命周期/查询/场景树/输入/调试/类型转换"]
GO --> URE["UnRegisterExtension<br/>节点退出时取消注册"]
URE --> IUR["IUnRegister<br/>接口"]
URE --> DUR["DefaultUnRegister<br/>默认实现"]
URE --> URL["UnRegisterListExtension<br/>批量管理"]

图表来源

详细组件分析

节点扩展NodeExtensions

  • 安全释放QueueFreeX延迟、FreeX立即均包含空引用与有效性检查避免重复入队与非法释放。
  • 等待就绪WaitUntilReady若不在场景树内则等待Ready信号。
  • 有效性检查IsValidNode/IsInvalidNode统一三要素非空、实例有效、已在场景树
  • 输入控制SetInputAsHandled、DisableInput/EnableInput。
  • 场景树控制Paused、GetRootNodeX、AddChildX异步等待子节点就绪
  • 查询与遍历FindChildX、GetParentX、ForEachChild、GetOrCreateNode。
  • 调试与类型转换LogNodePath、PrintTreeX、SafeCallDeferred、OfType。
  • 复杂度与性能查找与遍历依赖Godot内部实现安全检查为O(1)GetOrCreateNode按需创建避免重复查找。
flowchart TD
Start(["调用 QueueFreeX"]) --> CheckNull["检查节点是否为空"]
CheckNull --> NullEnd{"为空?"}
NullEnd --> |是| End(["返回"])
NullEnd --> |否| CheckValid["检查实例有效性"]
CheckValid --> ValidEnd{"有效?"}
ValidEnd --> |否| End
ValidEnd --> |是| CheckQueued["检查是否已入删除队列"]
CheckQueued --> QueuedEnd{"已入队?"}
QueuedEnd --> |是| End
QueuedEnd --> |否| Deferred["CallDeferred QueueFree"]
Deferred --> End

图表来源

章节来源

路径扩展GodotPathExtensions

  • IsUserPath判断user://路径。
  • IsResPath判断res://路径。
  • IsGodotPath综合判断是否为Godot虚拟路径。
flowchart TD
S(["输入路径"]) --> Empty{"是否为空?"}
Empty --> |是| RFalse["返回 false"]
Empty --> |否| CheckU["startsWith('user://')"]
CheckU --> |是| RTrue["返回 true"]
CheckU --> |否| CheckR["startsWith('res://')"]
CheckR --> |是| RTrue
CheckR --> |否| RFalse

图表来源

章节来源

信号扩展SignalFluentExtensions + SignalBuilder

  • SignalFluentExtensions为GodotObject提供Signal扩展方法创建SignalBuilder。
  • SignalBuilder支持WithFlags连接标志、To连接到可调用对象、ToAndCall连接并立即调用、End返回原始对象
  • 连接标志常用值Deferred、OneShot、ConnectPersisted、ReferenceCounted。
  • 与原生API对比流畅API减少样板代码性能与原生API相当。
sequenceDiagram
participant Dev as "开发者代码"
participant GO as "GodotObject"
participant Ext as "SignalFluentExtensions"
participant SB as "SignalBuilder"
participant Target as "目标Callable"
Dev->>GO : "调用 Signal(信号名)"
GO->>Ext : "扩展方法"
Ext->>SB : "创建 SignalBuilder"
Dev->>SB : "WithFlags(标志)"
Dev->>SB : "ToAndCall(可调用对象, 参数...)"
SB->>GO : "Connect(信号, 可调用对象, 标志?)"
SB->>Target : "立即调用 Call(参数)"
SB-->>Dev : "返回 SignalBuilder支持链式"

图表来源

章节来源

事件生命周期扩展UnRegisterExtension

  • UnRegisterWhenNodeExitTree在节点TreeExiting时自动调用IUnRegister.UnRegister避免手动管理导致的内存泄漏。
  • 与DefaultUnRegister配合DefaultUnRegister封装回调执行后清理引用。
  • 与UnRegisterListExtension配合可将多个IUnRegister批量加入列表统一清理。
sequenceDiagram
participant Node as "Node"
participant UExt as "UnRegisterExtension"
participant UR as "IUnRegister/DefaultUnRegister"
participant List as "UnRegisterListExtension"
Node->>UExt : "UnRegisterWhenNodeExitTree(UR)"
UExt->>Node : "注册 TreeExiting 事件"
Node-->>UExt : "TreeExiting 触发"
UExt->>UR : "调用 UnRegister()"
UR-->>UExt : "执行回调并清理"
Note over UR,List : "也可加入 UnRegisterList 批量管理"

图表来源

章节来源

依赖分析

  • NodeExtensions依赖Godot引擎的Node/SceneTree/Callable/Variant等API提供安全封装与便利方法。
  • SignalFluentExtensions依赖SignalBuilder后者依赖GodotObject.ConnectFlags与Callable。
  • UnRegisterExtension依赖IUnRegister接口与Godot Node的TreeExiting事件。
  • DefaultUnRegister与UnRegisterListExtension属于Core层提供事件生命周期管理基础设施。
graph LR
NE["NodeExtensions"] --> GODOT["Godot引擎API"]
SF["SignalFluentExtensions"] --> SB["SignalBuilder"]
SB --> GODOT
URE["UnRegisterExtension"] --> IUR["IUnRegister"]
IUR --> DUR["DefaultUnRegister"]
IUR --> URL["UnRegisterListExtension"]

图表来源

章节来源

性能考虑

  • NodeExtensions避免在热路径中重复查找节点QueueFreeX延迟释放避免帧内状态冲突WaitUntilReady仅在需要时等待。
  • SignalBuilder轻量级对象创建成本低与原生API性能相当主要开销在链式调用与可调用对象调用。
  • UnRegisterExtension事件订阅与取消注册为O(1)操作;批量管理可减少多次遍历。

[本节为通用性能指导,无需具体文件引用]

故障排查指南

  • 节点释放异常
    • 症状直接调用QueueFree导致错误或重复释放。
    • 处理改用QueueFreeX内部已做空引用与有效性检查。
    • 参考:NodeExtensions.cs
  • 节点未就绪导致逻辑错误
  • 信号未触发或触发时机不当
  • 事件泄漏

章节来源

结论

Godot扩展模块通过NodeExtensions、GodotPathExtensions、SignalFluentExtensions/SignalBuilder与UnRegisterExtension提供了

  • 安全、便利的节点生命周期与场景树操作
  • 类型安全、可读性强的信号连接API
  • 自动化的事件生命周期管理 这些能力显著提升开发效率与代码稳定性,建议在项目中广泛采用,并遵循最佳实践与性能建议。

[本节为总结性内容,无需具体文件引用]

附录

章节来源