# Godot API 参考
**本文档引用的文件**
- [GFramework.Godot.csproj](file://GFramework.Godot/GFramework.Godot.csproj)
- [README.md](file://GFramework.Godot/README.md)
- [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)
- [NodeExtensions.cs](file://GFramework.Godot/extensions/NodeExtensions.cs)
- [SignalBuilder.cs](file://GFramework.Godot/extensions/signal/SignalBuilder.cs)
- [SignalFluentExtensions.cs](file://GFramework.Godot/extensions/signal/SignalFluentExtensions.cs)
- [AbstractNodePoolSystem.cs](file://GFramework.Godot/pool/AbstractNodePoolSystem.cs)
- [IPoolableNode.cs](file://GFramework.Godot/pool/IPoolableNode.cs)
- [IGodotSceneRegistry.cs](file://GFramework.Godot/scene/IGodotSceneRegistry.cs)
- [GodotSceneRegistry.cs](file://GFramework.Godot/scene/GodotSceneRegistry.cs)
- [IGodotUiRegistry.cs](file://GFramework.Godot/ui/IGodotUiRegistry.cs)
- [GodotUiRegistry.cs](file://GFramework.Godot/ui/GodotUiRegistry.cs)
- [GodotUiFactory.cs](file://GFramework.Godot/ui/GodotUiFactory.cs)
- [GodotFileStorage.cs](file://GFramework.Godot/storage/GodotFileStorage.cs)
- [GodotLogger.cs](file://GFramework.Godot/logging/GodotLogger.cs)
- [GodotLoggerFactory.cs](file://GFramework.Godot/logging/GodotLoggerFactory.cs)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件为 GFramework.Godot 模块的详细 API 参考,覆盖与 Godot 引擎集成的接口与类,包括架构集成接口(IArchitecture、IGodotModule)、节点扩展接口(NodeExtensions、SignalBuilder)、场景注册接口(IGodotSceneRegistry)、UI 注册接口(IGodotUiRegistry)、文件存储接口(IFileStorage)等。文档还详细说明 Godot 特有的扩展方法、信号处理机制、资源池化系统、UI 工厂接口、Godot 生命周期绑定、节点管理、场景管理的 API 文档,并提供 Godot 项目集成的完整指南与最佳实践,以及与 Unity 或其他游戏引擎的差异与迁移注意事项,最后包含 Godot 特有的性能优化与调试技巧。
## 项目结构
GFramework.Godot 作为 Godot 特定实现,主要包含以下模块:
- architecture:Godot 架构集成与模块系统
- extensions:节点扩展与信号流畅 API
- pool:节点对象池系统
- scene:场景注册表
- ui:UI 注册表与 UI 工厂
- storage:Godot 文件存储
- logging:Godot 日志系统
```mermaid
graph TB
subgraph "Godot 集成层"
Arch["AbstractArchitecture
架构生命周期绑定"]
Mod["AbstractGodotModule / IGodotModule
Godot 模块接口"]
Ext["NodeExtensions
节点扩展方法"]
Sig["SignalBuilder / SignalFluentExtensions
信号流畅 API"]
Pool["AbstractNodePoolSystem / IPoolableNode
节点池化系统"]
SceneReg["IGodotSceneRegistry / GodotSceneRegistry
场景注册表"]
UiReg["IGodotUiRegistry / GodotUiRegistry
UI 注册表"]
UiFactory["GodotUiFactory
UI 工厂"]
FileStore["GodotFileStorage
文件存储"]
Loggers["GodotLogger / GodotLoggerFactory
日志系统"]
end
Arch --> Mod
Arch --> Ext
Ext --> Sig
Mod --> Pool
Mod --> UiReg
UiReg --> UiFactory
Mod --> FileStore
Arch --> Loggers
```
图表来源
- [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L14-L140)
- [AbstractGodotModule.cs](file://GFramework.Godot/architecture/AbstractGodotModule.cs#L11-L55)
- [NodeExtensions.cs](file://GFramework.Godot/extensions/NodeExtensions.cs#L8-L259)
- [SignalBuilder.cs](file://GFramework.Godot/extensions/signal/SignalBuilder.cs#L10-L65)
- [AbstractNodePoolSystem.cs](file://GFramework.Godot/pool/AbstractNodePoolSystem.cs#L11-L32)
- [IGodotSceneRegistry.cs](file://GFramework.Godot/scene/IGodotSceneRegistry.cs#L1-L9)
- [GodotSceneRegistry.cs](file://GFramework.Godot/scene/GodotSceneRegistry.cs#L11-L12)
- [IGodotUiRegistry.cs](file://GFramework.Godot/ui/IGodotUiRegistry.cs#L1-L10)
- [GodotUiRegistry.cs](file://GFramework.Godot/ui/GodotUiRegistry.cs#L11-L12)
- [GodotUiFactory.cs](file://GFramework.Godot/ui/GodotUiFactory.cs#L16-L463)
- [GodotFileStorage.cs](file://GFramework.Godot/storage/GodotFileStorage.cs#L15-L291)
- [GodotLogger.cs](file://GFramework.Godot/logging/GodotLogger.cs#L10-L42)
- [GodotLoggerFactory.cs](file://GFramework.Godot/logging/GodotLoggerFactory.cs#L8-L19)
章节来源
- [GFramework.Godot.csproj](file://GFramework.Godot/GFramework.Godot.csproj#L1-L22)
- [README.md](file://GFramework.Godot/README.md#L1-L893)
## 核心组件
本节概览 GFramework.Godot 的核心接口与类,重点说明与 Godot 引擎交互的关键能力。
- 架构集成接口
- IGodotModule:定义 Godot 模块的节点引用、附加/分离回调与安装方法
- AbstractGodotModule:模块抽象基类,提供阶段回调与安装/附加/分离的默认实现
- AbstractArchitecture:将架构与 Godot 生命周期绑定,创建架构锚点节点,安装模块并统一销毁
- ArchitectureAnchor:架构锚点节点,提供退出场景树时的回调绑定与清理
- 节点扩展与信号
- NodeExtensions:提供节点安全释放、等待就绪、节点查找与验证、输入处理、树遍历、延迟调用等扩展方法
- SignalBuilder / SignalFluentExtensions:流畅的信号连接 API,支持链式调用、一次性连接、立即调用与生命周期绑定
- 资源与 UI
- IGodotSceneRegistry / GodotSceneRegistry:基于键值的场景注册表,管理 PackedScene 资源
- IGodotUiRegistry / GodotUiRegistry:基于键值的 UI 注册表,管理 PackedScene 资源
- GodotUiFactory:UI 页面实例创建与缓存/池化管理,支持预加载、LRU/LFU 淘汰策略、命中率统计
- 资源池化
- AbstractNodePoolSystem:基于场景实例化的节点池系统,继承通用对象池并实现节点特化创建
- IPoolableNode:可池化节点接口,提供 Node 转换能力
- 文件存储
- GodotFileStorage:支持 res://、user:// 与普通文件路径的文件存储,提供线程安全(按 key 锁)、序列化读写与存在性检查
- 日志系统
- GodotLogger / GodotLoggerFactory:与 Godot 日志系统集成的日志记录器与工厂,按级别输出到控制台
章节来源
- [IGodotModule.cs](file://GFramework.Godot/architecture/IGodotModule.cs#L10-L27)
- [AbstractGodotModule.cs](file://GFramework.Godot/architecture/AbstractGodotModule.cs#L11-L55)
- [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L14-L140)
- [ArchitectureAnchor.cs](file://GFramework.Godot/architecture/ArchitectureAnchor.cs#L9-L35)
- [NodeExtensions.cs](file://GFramework.Godot/extensions/NodeExtensions.cs#L8-L259)
- [SignalBuilder.cs](file://GFramework.Godot/extensions/signal/SignalBuilder.cs#L10-L65)
- [SignalFluentExtensions.cs](file://GFramework.Godot/extensions/signal/SignalFluentExtensions.cs#L8-L22)
- [IGodotSceneRegistry.cs](file://GFramework.Godot/scene/IGodotSceneRegistry.cs#L1-L9)
- [GodotSceneRegistry.cs](file://GFramework.Godot/scene/GodotSceneRegistry.cs#L11-L12)
- [IGodotUiRegistry.cs](file://GFramework.Godot/ui/IGodotUiRegistry.cs#L1-L10)
- [GodotUiRegistry.cs](file://GFramework.Godot/ui/GodotUiRegistry.cs#L11-L12)
- [GodotUiFactory.cs](file://GFramework.Godot/ui/GodotUiFactory.cs#L16-L463)
- [AbstractNodePoolSystem.cs](file://GFramework.Godot/pool/AbstractNodePoolSystem.cs#L11-L32)
- [IPoolableNode.cs](file://GFramework.Godot/pool/IPoolableNode.cs#L10-L17)
- [GodotFileStorage.cs](file://GFramework.Godot/storage/GodotFileStorage.cs#L15-L291)
- [GodotLogger.cs](file://GFramework.Godot/logging/GodotLogger.cs#L10-L42)
- [GodotLoggerFactory.cs](file://GFramework.Godot/logging/GodotLoggerFactory.cs#L8-L19)
## 架构总览
GFramework.Godot 的架构通过 AbstractArchitecture 将框架生命周期与 Godot 场景树绑定,创建唯一的架构锚点节点,安装模块并将模块节点作为锚点子节点,实现与 Godot 生命周期的无缝衔接。模块通过 IGodotModule 接口声明自身节点与生命周期回调,支持阶段驱动的初始化与清理。
```mermaid
sequenceDiagram
participant Dev as "开发者代码"
participant Arch as "AbstractArchitecture"
participant Anchor as "ArchitectureAnchor"
participant Mod as "IGodotModule 实现"
participant Tree as "SceneTree"
Dev->>Arch : "Initialize()"
Arch->>Tree : "查找根节点"
Arch->>Arch : "生成唯一锚点名称"
Arch->>Anchor : "创建锚点节点"
Arch->>Anchor : "Bind(Destroy)"
Arch->>Tree.Root : "CallDeferred(AddChild, Anchor)"
Arch->>Mod : "Install(this)"
Arch->>Anchor : "WaitUntilReady()"
Arch->>Anchor : "CallDeferred(AddChild, Mod.Node)"
Arch->>Mod : "OnAttach(this)"
Note over Arch,Mod : "模块安装完成,随场景树销毁自动清理"
```
图表来源
- [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L56-L119)
- [ArchitectureAnchor.cs](file://GFramework.Godot/architecture/ArchitectureAnchor.cs#L17-L34)
章节来源
- [AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L14-L140)
- [ArchitectureAnchor.cs](file://GFramework.Godot/architecture/ArchitectureAnchor.cs#L9-L35)
## 详细组件分析
### 架构集成接口(IArchitecture、IGodotModule)
- IGodotModule
- Node:模块关联的 Godot 节点
- OnAttach(Architecture):模块附加到架构时调用
- OnDetach():模块从架构分离时调用
- AbstractGodotModule
- Install(Architecture):安装模块到架构
- OnPhase(phase, architecture) / OnArchitecturePhase(phase):阶段回调
- OnAttach / OnDetach 默认空实现,便于按需覆写
```mermaid
classDiagram
class IGodotModule {
+Node Node
+Install(architecture)
+OnAttach(architecture)
+OnDetach()
}
class AbstractGodotModule {
+Node Node
+Install(architecture)
+OnPhase(phase, architecture)
+OnArchitecturePhase(phase)
+OnAttach(architecture)
+OnDetach()
}
IGodotModule <|.. AbstractGodotModule
```
图表来源
- [IGodotModule.cs](file://GFramework.Godot/architecture/IGodotModule.cs#L10-L27)
- [AbstractGodotModule.cs](file://GFramework.Godot/architecture/AbstractGodotModule.cs#L11-L55)
章节来源
- [IGodotModule.cs](file://GFramework.Godot/architecture/IGodotModule.cs#L1-L27)
- [AbstractGodotModule.cs](file://GFramework.Godot/architecture/AbstractGodotModule.cs#L1-L55)
### 节点扩展接口(NodeExtensions)
NodeExtensions 提供大量安全、便捷的节点操作扩展,覆盖节点释放、等待就绪、节点查找与验证、输入处理、树遍历、延迟调用与类型转换等。
- 节点释放与等待
- QueueFreeX(node) / FreeX(node):安全释放,带空值与有效性检查
- WaitUntilReady(node):未在场景树内时等待 Ready 信号
- 节点验证与查找
- IsValidNode(node) / IsInvalidNode(node):组合检查节点有效性
- FindChildX(node, name, recursive):安全递归查找子节点
- 输入与场景树控制
- SetInputAsHandled(node):标记输入已处理
- DisableInput(node) / EnableInput(node):控制 GUI 输入
- Paused(node, paused):设置场景树暂停状态
- 场景树操作
- AddChildX(parent, child):异步添加子节点并等待就绪
- GetParentX(node) / GetRootNodeX(node):安全获取父节点与根节点
- ForEachChild(node, action):按类型遍历子节点
- 调试与辅助
- LogNodePath(node) / PrintTreeX(node, indent):打印节点路径与树结构
- SafeCallDeferred(node, method):安全延迟调用
- OfType(node):类型转换并抛出异常
```mermaid
flowchart TD
Start(["调用入口"]) --> CheckNull["检查节点是否为空"]
CheckNull --> NullBranch{"为空?"}
NullBranch --> |是| ReturnVoid["直接返回"]
NullBranch --> |否| CheckValid["检查实例有效性"]
CheckValid --> ValidBranch{"有效?"}
ValidBranch --> |否| ReturnVoid
ValidBranch --> |是| CheckQueued["检查是否已在删除队列"]
CheckQueued --> QueuedBranch{"已排队?"}
QueuedBranch --> |是| ReturnVoid
QueuedBranch --> |否| CallFree["调用释放方法"]
CallFree --> End(["完成"])
```
图表来源
- [NodeExtensions.cs](file://GFramework.Godot/extensions/NodeExtensions.cs#L14-L46)
章节来源
- [NodeExtensions.cs](file://GFramework.Godot/extensions/NodeExtensions.cs#L8-L259)
### 信号处理机制(SignalBuilder、SignalFluentExtensions)
SignalBuilder 提供流畅的信号连接 API,支持:
- WithFlags(flags):设置连接标志
- To(callable, flags?):连接信号到可调用对象
- ToAndCall(callable, flags?, args):连接后立即调用
- End():显式结束,返回目标对象
SignalFluentExtensions 为 GodotObject 提供 Signal(object, signal) 扩展,快速创建 SignalBuilder。
```mermaid
sequenceDiagram
participant Dev as "开发者代码"
participant Obj as "GodotObject"
participant Builder as "SignalBuilder"
participant Target as "目标节点"
Dev->>Obj : "Signal(signal)"
Obj-->>Dev : "返回 SignalBuilder"
Dev->>Builder : "WithFlags(flags)"
Dev->>Builder : "To(callable)"
Builder-->>Target : "Connect(signal, callable)"
Note over Builder,Target : "支持一次性连接、立即调用与生命周期绑定"
```
图表来源
- [SignalFluentExtensions.cs](file://GFramework.Godot/extensions/signal/SignalFluentExtensions.cs#L16-L22)
- [SignalBuilder.cs](file://GFramework.Godot/extensions/signal/SignalBuilder.cs#L19-L55)
章节来源
- [SignalFluentExtensions.cs](file://GFramework.Godot/extensions/signal/SignalFluentExtensions.cs#L1-L22)
- [SignalBuilder.cs](file://GFramework.Godot/extensions/signal/SignalBuilder.cs#L1-L65)
### 资源池化系统(AbstractNodePoolSystem、IPoolableNode)
AbstractNodePoolSystem 为 Godot 节点对象池系统,继承通用对象池并实现基于场景实例化的创建逻辑;IPoolableNode 定义可池化节点的 Node 转换能力。
- 关键点
- LoadScene(key):抽象方法,用于加载 PackedScene
- Create(key):基于场景实例化节点
- 与 Godot 节点生命周期配合,支持可见性切换、父节点移除与延迟释放
```mermaid
classDiagram
class AbstractObjectPoolSystem~TKey,TNode~ {
+Create(TKey) TNode
+Spawn(TKey) TNode
+Despawn(TNode)
}
class AbstractNodePoolSystem~TKey,TNode~ {
+LoadScene(TKey) PackedScene
+Create(TKey) TNode
}
class IPoolableNode {
+AsNode() Node
}
AbstractNodePoolSystem~TKey,TNode~ --|> AbstractObjectPoolSystem~TKey,TNode~
IPoolableNode <|.. TNode
```
图表来源
- [AbstractNodePoolSystem.cs](file://GFramework.Godot/pool/AbstractNodePoolSystem.cs#L11-L32)
- [IPoolableNode.cs](file://GFramework.Godot/pool/IPoolableNode.cs#L10-L17)
章节来源
- [AbstractNodePoolSystem.cs](file://GFramework.Godot/pool/AbstractNodePoolSystem.cs#L1-L32)
- [IPoolableNode.cs](file://GFramework.Godot/pool/IPoolableNode.cs#L1-L17)
### 场景注册接口(IGodotSceneRegistry、GodotSceneRegistry)
- IGodotSceneRegistry:基于键值的场景注册表接口,值类型为 PackedScene
- GodotSceneRegistry:继承键值注册表基类,使用字符串键与 PackedScene 值进行存储与访问
```mermaid
classDiagram
class IAssetRegistry~T~ {
+Get(key) T
+Set(key, value)
+Has(key) bool
}
class IGodotSceneRegistry {
}
class GodotSceneRegistry {
}
IAssetRegistry~PackedScene~ <|.. IGodotSceneRegistry
GodotSceneRegistry ..|> IGodotSceneRegistry
```
图表来源
- [IGodotSceneRegistry.cs](file://GFramework.Godot/scene/IGodotSceneRegistry.cs#L1-L9)
- [GodotSceneRegistry.cs](file://GFramework.Godot/scene/GodotSceneRegistry.cs#L11-L12)
章节来源
- [IGodotSceneRegistry.cs](file://GFramework.Godot/scene/IGodotSceneRegistry.cs#L1-L9)
- [GodotSceneRegistry.cs](file://GFramework.Godot/scene/GodotSceneRegistry.cs#L1-L12)
### UI 注册与工厂(IGodotUiRegistry、GodotUiRegistry、GodotUiFactory)
- IGodotUiRegistry / GodotUiRegistry:基于键值的 UI 注册表,值类型为 PackedScene
- GodotUiFactory:UI 页面实例创建与缓存/池化管理
- GetOrCreate(uiKey, policy):根据策略创建或复用实例
- Create(uiKey):直接创建新实例
- Preload(uiKey, count) / PreloadBatch(uiKeys):批量预加载隐藏实例
- Recycle(page):回收实例到缓存池,更新统计与访问追踪
- SetCacheConfig(uiKey, config) / GetCacheConfig(uiKey) / RemoveCacheConfig(uiKey):缓存配置管理
- ClearCache(uiKey) / ClearAllCache():清理指定或全部缓存
- HasCached(uiKey):检查是否有缓存实例
- GetCacheStatistics():获取缓存命中率等统计信息
- 淘汰策略:LRU(按访问时间)与 LFU(按访问次数),支持最大缓存大小与淘汰策略配置
```mermaid
flowchart TD
Start(["GetOrCreate(uiKey, policy)"]) --> Policy{"策略"}
Policy --> |AlwaysCreate| Create["Create(uiKey)"]
Policy --> |Reuse| Cached["HasCached(uiKey) ? 取缓存 : Create(uiKey)"]
Policy --> |Pooled| PoolCheck{"缓存为空?"}
PoolCheck --> |是| Preload["Preload(uiKey)"] --> Cached
PoolCheck --> |否| Cached
Cached --> End(["返回实例"])
Create --> End
```
图表来源
- [GodotUiFactory.cs](file://GFramework.Godot/ui/GodotUiFactory.cs#L67-L75)
- [GodotUiFactory.cs](file://GFramework.Godot/ui/GodotUiFactory.cs#L253-L288)
章节来源
- [IGodotUiRegistry.cs](file://GFramework.Godot/ui/IGodotUiRegistry.cs#L1-L10)
- [GodotUiRegistry.cs](file://GFramework.Godot/ui/GodotUiRegistry.cs#L11-L12)
- [GodotUiFactory.cs](file://GFramework.Godot/ui/GodotUiFactory.cs#L16-L463)
### 文件存储接口(GodotFileStorage)
GodotFileStorage 实现 IStorage,支持:
- Delete(key):删除文件(支持 res:// 与 user:// 虚拟路径与普通文件系统路径)
- Exists(key) / ExistsAsync(key):检查文件是否存在
- Read(key) / Read(key, defaultValue) / ReadAsync(key):读取并反序列化
- Write(key, value) / WriteAsync(key, value):序列化并写入
- 线程安全:按绝对路径生成 keyLock,每个 key 对应独立锁
- 路径处理:清理非法字符、规范化路径、Godot 虚拟路径与本地文件系统路径分别处理
```mermaid
flowchart TD
Start(["Write(key, value)"]) --> AbsPath["ToAbsolutePath(key)"]
AbsPath --> Lock["GetLock(path)"]
Lock --> Serialize["_serializer.Serialize(value)"]
Serialize --> CheckGodot{"是否 Godot 路径?"}
CheckGodot --> |是| OpenWrite["FileAccess.Open(path, Write)"]
CheckGodot --> |否| Local["Directory.CreateDirectory(...) / File.WriteAllText(...)"]
OpenWrite --> Store["file.StoreString(content)"]
Local --> Done(["完成"])
Store --> Done
```
图表来源
- [GodotFileStorage.cs](file://GFramework.Godot/storage/GodotFileStorage.cs#L256-L276)
- [GodotFileStorage.cs](file://GFramework.Godot/storage/GodotFileStorage.cs#L85-L114)
章节来源
- [GodotFileStorage.cs](file://GFramework.Godot/storage/GodotFileStorage.cs#L15-L291)
### 日志系统(GodotLogger、GodotLoggerFactory)
- GodotLogger:继承抽象日志器,按级别输出到 GD.Print、GD.PrintErr、GD.PushWarning、GD.PushError
- GodotLoggerFactory:创建 GodotLogger 实例,支持最小日志级别配置
```mermaid
classDiagram
class ILogger {
+Log(level, message, exception)
}
class AbstractLogger {
+Write(level, message, exception)
}
class GodotLogger {
+Write(level, message, exception)
}
class ILoggerFactory {
+GetLogger(name, minLevel) ILogger
}
class GodotLoggerFactory {
+GetLogger(name, minLevel) ILogger
}
AbstractLogger <|-- GodotLogger
ILogger <|.. GodotLogger
ILoggerFactory <|.. GodotLoggerFactory
```
图表来源
- [GodotLogger.cs](file://GFramework.Godot/logging/GodotLogger.cs#L10-L42)
- [GodotLoggerFactory.cs](file://GFramework.Godot/logging/GodotLoggerFactory.cs#L8-L19)
章节来源
- [GodotLogger.cs](file://GFramework.Godot/logging/GodotLogger.cs#L1-L42)
- [GodotLoggerFactory.cs](file://GFramework.Godot/logging/GodotLoggerFactory.cs#L1-L19)
## 依赖分析
GFramework.Godot 通过项目引用与接口契约与其他模块协作:
- 项目引用
- GFramework.Game:游戏层实现与抽象
- GFramework.Game.Abstractions:游戏抽象接口
- GFramework.Core.Abstractions:核心抽象接口
- 关键依赖关系
- AbstractArchitecture 依赖 Godot SceneTree 与 ArchitectureAnchor
- GodotUiFactory 依赖 IGodotUiRegistry 与 IUiPageBehaviorProvider
- GodotFileStorage 依赖 ISerializer 与 Godot 文件访问 API
- 日志系统依赖 Godot 日志输出 API
```mermaid
graph TB
Proj["GFramework.Godot.csproj"]
Game["GFramework.Game"]
GameAb["GFramework.Game.Abstractions"]
CoreAb["GFramework.Core.Abstractions"]
Proj --> Game
Proj --> GameAb
Proj --> CoreAb
```
图表来源
- [GFramework.Godot.csproj](file://GFramework.Godot/GFramework.Godot.csproj#L16-L20)
章节来源
- [GFramework.Godot.csproj](file://GFramework.Godot/GFramework.Godot.csproj#L1-L22)
## 性能考虑
- 节点池化
- 使用 AbstractNodePoolSystem 与 IPoolableNode 管理高频创建/销毁的节点,减少 GC 压力与卡顿
- 预加载隐藏实例,降低 UI 切换与特效触发时的瞬时开销
- 缓存与淘汰
- GodotUiFactory 支持 LRU/LFU 淘汰策略,结合最大缓存大小限制内存占用
- 命中率统计帮助评估缓存效果,指导预加载数量与策略调整
- 文件存储
- 按 key 锁保证并发安全,避免竞态;合理拆分 key,降低锁竞争
- 读写采用 UTF-8 文本序列化,注意大文件与频繁 IO 的异步化
- 信号与事件
- 使用 SignalBuilder 进行一次性连接与生命周期绑定,避免泄漏
- 事件订阅建议在节点退出时自动解绑,减少内存泄漏风险
## 故障排查指南
- 节点释放与生命周期
- 使用 QueueFreeX / FreeX 替代直接释放,避免在当前帧释放导致的异常
- 确保节点在场景树内再进行操作,使用 WaitUntilReady 等待就绪
- 信号连接泄漏
- 使用 SignalBuilder 链式 API 并在节点退出时自动解绑
- 避免直接 += 事件订阅,推荐框架事件系统与自动清理扩展
- UI 缓存问题
- 检查缓存配置与淘汰策略是否合理,必要时清理缓存或调整最大容量
- 使用 GetCacheStatistics 观察命中率,定位缓存不足或过度缓存
- 文件存储错误
- 检查路径合法性与 Godot 虚拟路径支持,避免 '..' 与空键
- 注意并发写入时的锁竞争,必要时合并写入或使用异步接口
- 日志输出
- 确认日志级别与工厂配置,避免过多低级别日志影响性能
章节来源
- [NodeExtensions.cs](file://GFramework.Godot/extensions/NodeExtensions.cs#L14-L46)
- [SignalBuilder.cs](file://GFramework.Godot/extensions/signal/SignalBuilder.cs#L19-L55)
- [GodotUiFactory.cs](file://GFramework.Godot/ui/GodotUiFactory.cs#L193-L201)
- [GodotFileStorage.cs](file://GFramework.Godot/storage/GodotFileStorage.cs#L85-L114)
- [GodotLogger.cs](file://GFramework.Godot/logging/GodotLogger.cs#L14-L41)
## 结论
GFramework.Godot 通过清晰的接口与强大的扩展能力,实现了与 Godot 引擎的深度集成。架构生命周期绑定、节点扩展、信号流畅 API、资源池化、UI 工厂、文件存储与日志系统共同构成了一套高效、安全、可维护的开发体系。遵循本文档的最佳实践与性能建议,可显著提升开发效率与运行性能。
## 附录
- 与 Unity 的差异与迁移注意事项
- 生命周期绑定:Godot 通过 SceneTree 与节点生命周期绑定,Unity 通过 MonoBehaviour 生命周期与协程管理;迁移时需将 Unity 的 Start/Awake 映射到 Godot 的 _Ready/_EnterTree 等
- 信号与事件:Godot 使用 Connect/Disconnect 与 Signal 属性,Unity 使用 C# 事件或 UnityEvent;迁移时建议统一使用框架事件系统并配合自动清理扩展
- 节点管理:Godot 的节点树与父子关系管理更为严格,迁移时需确保节点释放与场景树一致性
- 资源加载:Godot 使用 GD.Load 与 PackedScene,Unity 使用 Addressables/Resource 系统;迁移时统一使用注册表与工厂模式
- 日志:Godot 使用 GD.Print 系列,Unity 使用 UnityLog 或第三方日志库;迁移时统一使用框架日志工厂
- Godot 特有性能优化与调试技巧
- 使用延迟调用(CallDeferred)避免在渲染帧中执行昂贵操作
- 合理使用信号一次性连接(ConnectFlags.OneShot)减少回调开销
- UI 预加载与缓存策略结合 LRU/LFU,平衡内存与性能
- 文件存储采用 UTF-8 文本序列化,注意大文件异步读写
- 使用节点树打印与路径日志辅助调试场景树问题