diff --git a/GFramework.Core.Godot/system/AbstractAudioManagerSystem.cs b/GFramework.Core.Godot/system/AbstractAudioManagerSystem.cs
index 87181fc..0df032f 100644
--- a/GFramework.Core.Godot/system/AbstractAudioManagerSystem.cs
+++ b/GFramework.Core.Godot/system/AbstractAudioManagerSystem.cs
@@ -419,7 +419,7 @@ public abstract class AbstractAudioManagerSystem : AbstractSystem, IAudioManager
///
/// 系统销毁时清理资源
///
- protected void OnDestroy()
+ protected override void OnDestroy()
{
// 停止并清理淡入淡出动画
MusicFadeTween?.Kill();
diff --git a/GFramework.Core/architecture/Architecture.cs b/GFramework.Core/architecture/Architecture.cs
index 2d06bd4..aebbf70 100644
--- a/GFramework.Core/architecture/Architecture.cs
+++ b/GFramework.Core/architecture/Architecture.cs
@@ -35,7 +35,7 @@ public abstract class Architecture : IArchitecture where T : Architecture,
arch.Init();
// 执行注册的补丁逻辑
- OnRegisterPatch?.Invoke(arch);
+ OnRegisterPatch(arch);
// 初始化所有已注册但尚未初始化的模型
foreach (var model in arch._mModels) model.Init();
@@ -236,6 +236,19 @@ public abstract class Architecture : IArchitecture where T : Architecture,
_mTypeEventSystem.UnRegister(onEvent);
}
+ ///
+ /// 销毁架构,同时销毁所有已注册的系统
+ ///
+ public void Destroy()
+ {
+ // 销毁所有已注册的系统
+ foreach (var system in _mSystems)
+ {
+ system.Destroy();
+ }
+ _mSystems.Clear();
+ }
+
///
/// 抽象初始化方法,由子类重写以进行自定义初始化操作
diff --git a/GFramework.Core/system/AbstractSystem.cs b/GFramework.Core/system/AbstractSystem.cs
index 927c34a..1490b64 100644
--- a/GFramework.Core/system/AbstractSystem.cs
+++ b/GFramework.Core/system/AbstractSystem.cs
@@ -5,7 +5,7 @@ namespace GFramework.Core.system;
///
/// 抽象系统基类,实现系统接口的基本功能
-/// 提供架构关联和初始化机制
+/// 提供架构关联、初始化和销毁机制
///
public abstract class AbstractSystem : ISystem
{
@@ -37,8 +37,21 @@ public abstract class AbstractSystem : ISystem
OnInit();
}
+ ///
+ /// 系统销毁方法,调用抽象销毁方法
+ ///
+ void ISystem.Destroy()
+ {
+ OnDestroy();
+ }
+
///
/// 抽象初始化方法,由子类实现具体的初始化逻辑
///
protected abstract void OnInit();
+
+ ///
+ /// 抽象销毁方法,由子类实现具体的资源清理逻辑
+ ///
+ protected virtual void OnDestroy() { }
}
\ No newline at end of file
diff --git a/GFramework.Core/system/ISystem.cs b/GFramework.Core/system/ISystem.cs
index 4f5bef4..c8c031f 100644
--- a/GFramework.Core/system/ISystem.cs
+++ b/GFramework.Core/system/ISystem.cs
@@ -1,4 +1,4 @@
-using GFramework.Core.events;
+using GFramework.Core.events;
using GFramework.Core.model;
using GFramework.Core.rule;
using GFramework.Core.utility;
@@ -7,7 +7,7 @@ namespace GFramework.Core.system;
///
/// 系统接口,定义了系统的基本行为和功能
-/// 该接口继承了多个框架相关的接口,提供了系统初始化能力
+/// 该接口继承了多个框架相关的接口,提供了系统初始化和销毁能力
///
public interface ISystem : ICanSetArchitecture, ICanGetModel, ICanGetUtility,
ICanRegisterEvent, ICanSendEvent, ICanGetSystem
@@ -17,4 +17,10 @@ public interface ISystem : ICanSetArchitecture, ICanGetModel, ICanGetUtility,
/// 在系统被创建后调用,用于执行系统的初始化逻辑
///
void Init();
+
+ ///
+ /// 销毁系统
+ /// 在系统被销毁前调用,用于执行系统的资源清理逻辑
+ ///
+ void Destroy();
}
\ No newline at end of file