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

15 KiB
Raw Blame History

IGodotModule接口规范

**本文档引用的文件** - [IGodotModule.cs](file://GFramework.Godot/architecture/IGodotModule.cs) - [AbstractGodotModule.cs](file://GFramework.Godot/architecture/AbstractGodotModule.cs) - [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs) - [ArchitectureAnchor.cs](file://GFramework.Godot/architecture/ArchitectureAnchor.cs) - [IArchitectureModule.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureModule.cs) - [IArchitectureLifecycle.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureLifecycle.cs) - [IArchitecturePhaseAware.cs](file://GFramework.Core.Abstractions/architecture/IArchitecturePhaseAware.cs) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs) - [ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs) - [NodeExtensions.cs](file://GFramework.Godot/extensions/NodeExtensions.cs) - [UnRegisterExtension.cs](file://GFramework.Godot/extensions/UnRegisterExtension.cs) - [godot-integration.md](file://docs/tutorials/godot-integration.md) - [godot-api.md](file://docs/api-reference/godot-api.md) - [AbstractModule.cs](file://GFramework.Game/architecture/AbstractModule.cs)

目录

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

简介

IGodotModule接口是GFramework中Godot引擎模块化架构的核心接口它定义了Godot引擎中模块的基本行为和属性。该接口继承自IArchitectureModule接口专门为Godot引擎的节点系统设计提供了模块与Godot场景树的深度集成能力。

IGodotModule接口的设计理念基于以下原则

  • 节点优先模块通过Node属性直接暴露Godot节点实现与场景树的无缝集成
  • 生命周期管理通过Install、OnAttach、OnDetach方法提供完整的模块生命周期控制
  • 架构解耦模块通过IArchitecture接口与架构交互保持松耦合设计
  • 异步支持:支持异步模块安装和节点管理

项目结构

GFramework的Godot模块系统采用分层架构设计主要包含以下核心层次

graph TB
subgraph "接口层"
IArch["IArchitectureModule"]
IGodot["IGodotModule"]
ILife["IArchitectureLifecycle"]
IPhase["IArchitecturePhaseAware"]
end
subgraph "抽象实现层"
AbsMod["AbstractModule"]
AbsGodot["AbstractGodotModule"]
AbsArch["AbstractArchitecture"]
end
subgraph "具体实现层"
Arch["Architecture"]
Anchor["ArchitectureAnchor"]
NodeExt["NodeExtensions"]
end
subgraph "Godot集成层"
AudioMod["AudioModule示例"]
UIReg["UI注册表"]
SceneReg["场景注册表"]
end
IArch --> IGodot
IArch --> ILife
IArch --> IPhase
AbsMod --> IArch
AbsGodot --> IGodot
AbsArch --> AbsGodot
Arch --> AbsArch
AbsGodot --> Anchor
Anchor --> NodeExt
IGodot --> AudioMod
AbsArch --> UIReg
AbsArch --> SceneReg

图表来源

章节来源

核心组件

IGodotModule接口定义

IGodotModule接口是Godot模块系统的核心定义了模块与Godot引擎交互的标准契约

classDiagram
class IGodotModule {
<<interface>>
+Node Node
+Install(architecture) void
+OnAttach(architecture) void
+OnDetach() void
}
class IArchitectureModule {
<<interface>>
+Install(architecture) void
+OnPhase(phase, architecture) void
+OnArchitecturePhase(phase) void
}
class IArchitectureLifecycle {
<<interface>>
+OnPhase(phase, architecture) void
}
class IArchitecturePhaseAware {
<<interface>>
+OnArchitecturePhase(phase) void
}
IArchitectureModule --|> IArchitectureLifecycle
IArchitectureModule --|> IArchitecturePhaseAware
IGodotModule --|> IArchitectureModule

图表来源

关键方法职责说明

Node属性

  • 职责返回模块关联的Godot节点实例
  • 实现要求必须返回有效的Godot Node对象
  • 使用场景:作为模块在场景树中的可视化表现

Install方法

  • 职责:将模块安装到指定的架构中
  • 调用时机:在架构初始化过程中自动调用
  • 实现要求:注册系统、工具等架构组件

OnAttach方法

  • 职责:当模块被附加到架构时调用
  • 调用时机:模块节点添加到场景树后调用
  • 实现要求:执行模块的初始化逻辑

OnDetach方法

  • 职责:当模块从架构分离时调用
  • 调用时机:架构销毁或模块卸载时调用
  • 实现要求:执行清理和资源释放

章节来源

架构概览

GFramework的Godot模块架构采用分层设计通过AbstractArchitecture类管理模块的生命周期和节点管理

sequenceDiagram
participant App as 应用程序
participant Arch as AbstractArchitecture
participant Mod as IGodotModule
participant Anchor as ArchitectureAnchor
participant Tree as Godot场景树
App->>Arch : Init()
Arch->>Arch : AttachToGodotLifecycle()
Arch->>Anchor : 创建锚点节点
Anchor->>Tree : 添加到场景树
App->>Arch : InstallModules()
Arch->>Mod : Install(this)
Mod-->>Arch : 安装完成
Arch->>Anchor : WaitUntilReady()
Anchor-->>Arch : 准备就绪
Arch->>Tree : AddChild(Mod.Node)
Tree-->>Mod : 节点添加完成
Arch->>Mod : OnAttach(this)
Mod-->>Arch : 附加完成
Note over Arch,Mod : 模块正常运行中
App->>Arch : Destroy()
Arch->>Mod : OnDetach()
Mod-->>Arch : 清理完成
Arch->>Tree : 移除锚点节点

图表来源

架构锚点机制

ArchitectureAnchor类是Godot模块系统的关键组件它提供了以下功能

  1. 生命周期绑定通过_bind方法绑定节点退出时的回调
  2. 资源清理:在节点从场景树移除时执行清理操作
  3. 异步支持提供WaitUntilReady方法支持异步节点管理

章节来源

详细组件分析

AbstractGodotModule抽象基类

AbstractGodotModule提供了IGodotModule接口的完整实现包含以下特性

classDiagram
class AbstractGodotModule {
<<abstract>>
+Node Node*
+Install(architecture)*
+OnAttach(architecture)
+OnDetach()
+OnPhase(phase, architecture)
+OnArchitecturePhase(phase)
}
class AbstractModule {
+Install(architecture)*
+OnPhase(phase, architecture)
+OnArchitecturePhase(phase)
}
class IGodotModule {
<<interface>>
+Node Node
+Install(architecture)
+OnAttach(architecture)
+OnDetach()
}
AbstractGodotModule --|> IGodotModule
AbstractModule --|> IArchitectureModule
AbstractGodotModule --|> AbstractModule

图表来源

模块安装流程

模块的安装过程遵循严格的生命周期管理:

flowchart TD
Start([开始安装]) --> CheckAnchor["检查架构锚点"]
CheckAnchor --> AnchorReady{"锚点已准备?"}
AnchorReady --> |否| ThrowError["抛出异常"]
AnchorReady --> |是| CallInstall["调用Install方法"]
CallInstall --> WaitReady["等待锚点就绪"]
WaitReady --> AddChild["添加模块节点到场景树"]
AddChild --> CallAttach["调用OnAttach方法"]
CallAttach --> AddToList["添加到扩展列表"]
AddToList --> Complete([安装完成])
ThrowError --> End([结束])
Complete --> End

图表来源

节点管理机制

GFramework提供了完善的节点管理机制包括

节点生命周期管理

  • QueueFreeX:安全的节点释放方法,避免在当前帧中直接删除
  • WaitUntilReady:异步等待节点进入场景树
  • IsValidNode:检查节点的有效性状态

节点操作扩展

  • AddChildX:异步添加子节点并等待准备就绪
  • FindChildX:类型安全的子节点查找
  • GetOrCreateNode:智能的节点获取或创建

章节来源

事件清理机制

GFramework提供了自动化的事件清理机制确保节点退出时的资源正确释放

sequenceDiagram
participant Node as Godot节点
participant Ext as UnRegisterExtension
participant Listener as 事件监听器
participant Bus as 事件总线
Node->>Ext : RegisterEvent(event).UnRegisterWhenNodeExitTree(this)
Ext->>Node : 订阅TreeExiting事件
Node->>Listener : 注册事件处理
Note over Node,Bus : 事件正常传递
Node->>Node : 从场景树移除
Node->>Ext : 触发TreeExiting事件
Ext->>Listener : 调用UnRegister()
Listener-->>Bus : 从事件总线注销
Note over Node,Bus : 资源清理完成

图表来源

章节来源

依赖关系分析

GFramework的Godot模块系统具有清晰的依赖层次结构

graph TB
subgraph "外部依赖"
Godot[Godot引擎]
CSharp[C#运行时]
end
subgraph "核心抽象层"
CoreAbstractions[GFramework.Core.Abstractions]
Enums[枚举定义]
Interfaces[接口定义]
end
subgraph "核心实现层"
Core[GFramework.Core]
Architecture[Architecture基类]
Events[事件系统]
end
subgraph "Godot集成层"
GodotAbstractions[GFramework.Godot.Abstractions]
GodotCore[GFramework.Godot]
Extensions[扩展方法]
end
subgraph "应用层"
GameAbstractions[GFramework.Game.Abstractions]
GameCore[GFramework.Game]
Modules[模块实现]
end
Godot --> GodotCore
CSharp --> CoreAbstractions
CoreAbstractions --> Core
Enums --> Core
Interfaces --> Core
Core --> GodotCore
Architecture --> GodotCore
Events --> GodotCore
GodotCore --> GameCore
Extensions --> GameCore
Modules --> GameCore
GameAbstractions --> GameCore
GameCore --> Modules

图表来源

关键依赖关系

  1. Godot引擎依赖所有Godot模块都直接依赖Godot引擎的Node类
  2. 架构抽象依赖模块通过IArchitecture接口与架构交互
  3. 生命周期管理依赖模块依赖IArchitectureLifecycle接口进行阶段管理
  4. 事件系统依赖:模块通过事件系统与其他组件通信

章节来源

性能考虑

异步节点管理

GFramework通过异步机制优化节点管理性能

  1. 延迟执行使用CallDeferred方法避免阻塞主线程
  2. 异步等待WaitUntilReady方法提供非阻塞的节点就绪检测
  3. 批量操作:支持多个模块的并发安装

内存管理优化

  1. 智能释放QueueFreeX方法确保节点安全释放
  2. 引用清理:自动清理事件监听器和信号连接
  3. 缓存策略合理使用对象池减少GC压力

架构阶段优化

通过ArchitecturePhase枚举实现模块的有序初始化避免不必要的资源竞争。

故障排除指南

常见问题及解决方案

模块安装失败

问题描述:模块无法正确安装到架构中 可能原因

  • 架构锚点未正确初始化
  • 模块节点无效
  • 架构已销毁

解决方法

  1. 检查AbstractArchitecture的初始化过程
  2. 验证模块Node属性的有效性
  3. 确认架构状态

节点生命周期问题

问题描述:模块节点无法正确响应生命周期事件 可能原因

  • 事件监听器未正确注销
  • 节点引用丢失
  • 场景树状态异常

解决方法

  1. 使用UnRegisterExtension确保事件正确清理
  2. 检查节点有效性检查
  3. 验证场景树状态

内存泄漏问题

问题描述:模块卸载后仍有内存占用 可能原因

  • 资源未正确释放
  • 事件监听器未注销
  • 对象循环引用

解决方法

  1. 在OnDetach中执行完整清理
  2. 使用QueueFreeX安全释放节点
  3. 检查所有事件订阅的注销

章节来源

结论

IGodotModule接口规范为Godot引擎的模块化开发提供了清晰的架构指导。通过节点优先的设计理念、完整的生命周期管理和异步支持机制该接口实现了模块与Godot场景树的深度集成。

关键设计要点包括:

  • 明确的职责分离:接口定义清晰的方法职责
  • 完善的生命周期管理:从安装到销毁的完整流程
  • 异步编程支持适应Godot的异步特性
  • 资源安全保证:自动化的资源清理机制

该接口规范为开发者提供了可靠的模块化开发框架有助于构建可维护、高性能的Godot游戏项目。

附录

接口实现最佳实践

设计模式推荐

  1. 模板方法模式使用AbstractGodotModule提供默认实现
  2. 策略模式:通过不同的模块实现特定功能
  3. 观察者模式:利用事件系统实现松耦合通信

实现示例参考

完整的AudioModule实现示例可在以下文档中找到

常见实现陷阱

  1. 过度耦合:避免直接依赖具体实现而非接口
  2. 资源泄漏确保所有资源在OnDetach中正确释放
  3. 同步阻塞:避免在主线程中执行长时间操作
  4. 状态管理:不要在模块中存储全局状态