From c744d8d9fc4e14f83bde143fc7e354a4e980c6a8 Mon Sep 17 00:00:00 2001 From: yhh <359807859@qq.com> Date: Thu, 4 Dec 2025 10:10:31 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E6=97=B6=E8=BF=90=E8=A1=8C=E6=97=B6=E5=92=8C?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E9=87=8D=E5=A4=8D=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/editor-app/src/App.tsx | 7 +++++++ packages/editor-app/src/hooks/useEngine.ts | 9 +++++++++ packages/editor-app/src/services/EngineService.ts | 8 ++++++++ packages/editor-core/src/Plugin/PluginManager.ts | 5 +++++ 4 files changed, 29 insertions(+) diff --git a/packages/editor-app/src/App.tsx b/packages/editor-app/src/App.tsx index 29bf6c0a..b1dfc369 100644 --- a/packages/editor-app/src/App.tsx +++ b/packages/editor-app/src/App.tsx @@ -631,6 +631,13 @@ function App() { await pluginLoader.unloadProjectPlugins(pluginManager); } + // 清理场景(会清理所有实体和系统) + // Clear scene (clears all entities and systems) + const scene = Core.scene; + if (scene) { + scene.end(); + } + // 清理模块系统 const engineService = EngineService.getInstance(); engineService.clearModuleSystems(); diff --git a/packages/editor-app/src/hooks/useEngine.ts b/packages/editor-app/src/hooks/useEngine.ts index 5b67bd68..13bc3f2a 100644 --- a/packages/editor-app/src/hooks/useEngine.ts +++ b/packages/editor-app/src/hooks/useEngine.ts @@ -14,6 +14,15 @@ import { EditorEngineSync } from '../services/EditorEngineSync'; let engineInitialized = false; let engineInitializing = false; +/** + * 重置引擎初始化状态(在项目关闭时调用) + * Reset engine initialization state (called when project is closed) + */ +export function resetEngineState(): void { + engineInitialized = false; + engineInitializing = false; +} + export interface EngineState { initialized: boolean; running: boolean; diff --git a/packages/editor-app/src/services/EngineService.ts b/packages/editor-app/src/services/EngineService.ts index c89273d5..ec173cd8 100644 --- a/packages/editor-app/src/services/EngineService.ts +++ b/packages/editor-app/src/services/EngineService.ts @@ -28,6 +28,7 @@ import { type GameRuntimeConfig } from '@esengine/runtime-core'; import { getMaterialManager } from '@esengine/material-system'; +import { resetEngineState } from '../hooks/useEngine'; import { convertFileSrc } from '@tauri-apps/api/core'; import { IdGenerator } from '../utils/idGenerator'; import { TauriAssetReader } from './TauriAssetReader'; @@ -245,7 +246,14 @@ export class EngineService { ctx.uiInputSystem.unbind?.(); } + // 清理 viewport | Clear viewport + this.unregisterViewport('editor-viewport'); + + // 重置 useEngine 的模块级状态 | Reset useEngine module-level state + resetEngineState(); + this._modulesInitialized = false; + this._initialized = false; } /** diff --git a/packages/editor-core/src/Plugin/PluginManager.ts b/packages/editor-core/src/Plugin/PluginManager.ts index 5211c243..7d316ae7 100644 --- a/packages/editor-core/src/Plugin/PluginManager.ts +++ b/packages/editor-core/src/Plugin/PluginManager.ts @@ -1159,6 +1159,11 @@ export class PluginManager implements IService { } } } + + // 重置初始化状态,允许下次重新初始化运行时 + // Reset initialized flag to allow re-initialization + this.initialized = false; + logger.debug('Scene systems cleared, runtime can be re-initialized'); } /**