diff --git a/GFramework.Core.Tests/ecs/EcsAdvancedTests.cs b/GFramework.Core.Tests/ecs/EcsAdvancedTests.cs index 298e0e6..3831138 100644 --- a/GFramework.Core.Tests/ecs/EcsAdvancedTests.cs +++ b/GFramework.Core.Tests/ecs/EcsAdvancedTests.cs @@ -126,7 +126,7 @@ public class EcsAdvancedTests _world = _container!.Get(); - Assert.DoesNotThrow(() => { _ecsModule.Update(1.0f); }); + Assert.DoesNotThrow(() => _ecsModule.Update(1.0f)); } [Test] diff --git a/GFramework.Core/ecs/ArchEcsModule.cs b/GFramework.Core/ecs/ArchEcsModule.cs index 549b234..df25f37 100644 --- a/GFramework.Core/ecs/ArchEcsModule.cs +++ b/GFramework.Core/ecs/ArchEcsModule.cs @@ -11,6 +11,7 @@ public sealed class ArchEcsModule : IServiceModule { private readonly List> _systems = []; private IIocContainer? _container; + private bool _isInitialized; private World? _world; /// @@ -58,6 +59,12 @@ public sealed class ArchEcsModule : IServiceModule { if (!IsEnabled || _world == null || _container == null) return; + // 防止重复初始化 + if (_isInitialized) + { + return; + } + // 从容器获取所有适配器 var adapters = _container.GetAll>(); if (adapters.Count > 0) @@ -70,6 +77,8 @@ public sealed class ArchEcsModule : IServiceModule system.Initialize(); } } + + _isInitialized = true; } /// @@ -77,7 +86,7 @@ public sealed class ArchEcsModule : IServiceModule /// public async ValueTask DestroyAsync() { - if (!IsEnabled) return; + if (!IsEnabled || !_isInitialized) return; // 销毁所有系统 foreach (var system in _systems) @@ -94,6 +103,8 @@ public sealed class ArchEcsModule : IServiceModule _world = null; } + _isInitialized = false; + await ValueTask.CompletedTask; } diff --git a/GFramework.Core/ecs/ArchSystemAdapter.cs b/GFramework.Core/ecs/ArchSystemAdapter.cs index 47b9346..8d567fd 100644 --- a/GFramework.Core/ecs/ArchSystemAdapter.cs +++ b/GFramework.Core/ecs/ArchSystemAdapter.cs @@ -39,7 +39,7 @@ public abstract class ArchSystemAdapter : AbstractSystem, ArchSys.ISystem /// /// 显式实现 Arch.System.ISystem<T> 的主更新方法 - /// 调用受保护的抽象方法 OnUpdate 以强制子类实现核心更新逻辑 + /// 调用受保护的虚方法 OnUpdate 以强制子类实现核心更新逻辑 /// /// 系统数据参数(通常是 deltaTime) public void Update(in T t)