From f8c91ad238b62d5fb9375223792ff47c2690fc46 Mon Sep 17 00:00:00 2001 From: Blank Date: Sat, 29 Aug 2026 02:44:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(scene):=20=E4=BF=AE=E5=A4=8D=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E5=A4=B1=E8=B4=A5=E5=9C=BA=E6=99=AF=E4=BB=8D=E8=A2=AB?= =?UTF-8?q?=E6=A0=87=E8=AE=B0=E5=B7=B2=E5=8A=A0=E8=BD=BD=E7=9A=84=E5=AD=97?= =?UTF-8?q?=E5=85=B8=E7=BC=BA=E9=99=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Linear: GFX-722 --- Runtime/Scene/Scene/GameSceneManager.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Runtime/Scene/Scene/GameSceneManager.cs b/Runtime/Scene/Scene/GameSceneManager.cs index b763994..cae29f6 100644 --- a/Runtime/Scene/Scene/GameSceneManager.cs +++ b/Runtime/Scene/Scene/GameSceneManager.cs @@ -479,8 +479,11 @@ private void OnLoadSceneUpdate(YooAsset.SceneHandle sceneHandle) private void OnLoadSceneCompleted(YooAsset.SceneHandle sceneOperationHandle) { string assetPath = sceneOperationHandle.GetAssetInfo().AssetPath; + bool loadSucceed = sceneOperationHandle.IsDone && sceneOperationHandle.Status == YooAsset.EOperationStatus.Succeed; - if (!m_LoadedSceneAssetNames.ContainsKey(assetPath)) + // 状态判定前置:加载失败的场景不写入已加载字典,避免幽灵记录导致 + // UnloadScene 异常分支、同名场景重试被 "already loaded" 拦截及句柄泄漏。 + if (loadSucceed && !m_LoadedSceneAssetNames.ContainsKey(assetPath)) { m_LoadedSceneAssetNames.Add(assetPath, sceneOperationHandle); } @@ -492,7 +495,7 @@ private void OnLoadSceneCompleted(YooAsset.SceneHandle sceneOperationHandle) if (value != null) { - if (sceneOperationHandle.IsDone && sceneOperationHandle.Status == YooAsset.EOperationStatus.Succeed) + if (loadSucceed) { LoadSceneSuccessCallback(assetPath, sceneOperationHandle.Duration, value.UserData); }