From 5667c0a5e6b83964e2538a17dcfd6b719692ddda Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期四, 12 二月 2026 11:11:34 +0800
Subject: [PATCH] 编辑器 模拟使用资源问题处理

---
 Main/ResModule/YooAssetService.cs |  111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 108 insertions(+), 3 deletions(-)

diff --git a/Main/ResModule/YooAssetService.cs b/Main/ResModule/YooAssetService.cs
index beddec3..6fddd0d 100644
--- a/Main/ResModule/YooAssetService.cs
+++ b/Main/ResModule/YooAssetService.cs
@@ -70,7 +70,47 @@
                     var package = YooAssets.TryGetPackage(pkgName);
                     if (package != null)
                     {
-                        Debug.Log($"[YooAssetService] Reusing existing package '{pkgName}' from YooAssetInitializer");
+                        // 楠岃瘉鍖呰9鏄惁宸叉垚鍔熷垵濮嬪寲
+                        if (package.InitializeStatus == EOperationStatus.Succeed)
+                        {
+                            Debug.Log($"[YooAssetService] Reusing existing package '{pkgName}' (InitializeStatus=Succeed)");
+                        }
+                        else
+                        {
+                            // 鍖呰9瀛樺湪浣嗗垵濮嬪寲鏈畬鎴愭垨澶辫触锛堝兊灏稿寘瑁癸級
+                            // 閿�姣佸悗閲嶆柊鍒涘缓骞跺垵濮嬪寲
+                            Debug.LogWarning($"[YooAssetService] Package '{pkgName}' exists but InitializeStatus={package.InitializeStatus}, destroying and re-creating...");
+
+                            // 鏍规嵁鐘舵�佹竻鐞嗗兊灏稿寘瑁�
+                            if (package.InitializeStatus == EOperationStatus.None)
+                            {
+                                // 鏈垵濮嬪寲鐘舵�佸彲浠ョ洿鎺ョЩ闄�
+                                YooAssets.RemovePackage(pkgName);
+                            }
+                            else
+                            {
+                                // Failed/Processing 鐘舵�侀渶鍏堥攢姣佸啀绉婚櫎
+                                var destroyOp = package.DestroyAsync();
+                                await destroyOp.ToUniTask();
+                                YooAssets.RemovePackage(pkgName);
+                            }
+
+                            package = YooAssets.CreatePackage(pkgName);
+                            var initParams = CreateInitParameters(playMode, remoteServices, pkgName);
+                            var initOp = package.InitializeAsync(initParams);
+                            await initOp.ToUniTask();
+
+                            if (initOp.Status != EOperationStatus.Succeed)
+                            {
+                                Debug.LogWarning($"[YooAssetService] Package '{pkgName}' re-init failed: {initOp.Error}");
+                                continue;
+                            }
+
+                            Debug.Log($"[YooAssetService] Package '{pkgName}' re-initialized successfully.");
+
+                            // 閲嶆柊鍒濆鍖栧悗蹇呴』璇锋眰鐗堟湰骞舵洿鏂� Manifest
+                            await RequestVersionAndUpdateForPackageAsync(pkgName, package);
+                        }
                     }
                     else
                     {
@@ -85,6 +125,9 @@
                             Debug.LogWarning($"[YooAssetService] Package '{pkgName}' init failed: {initOp.Error}");
                             continue;
                         }
+
+                        // 鍒濆鍖栧悗蹇呴』璇锋眰鐗堟湰骞舵洿鏂� Manifest锛屽惁鍒� ActiveManifest 涓� null
+                        await RequestVersionAndUpdateForPackageAsync(pkgName, package);
 
                         Debug.Log($"[YooAssetService] Package '{pkgName}' newly initialized.");
                     }
@@ -112,7 +155,22 @@
             }
 
             _isInitialized = true;
-            Debug.Log($"[YooAssetService] Initialized {_packages.Count}/{YooAssetPackageConfig.AllPackages.Length} packages with PlayMode={playMode}");
+
+            // 杈撳嚭鍒濆鍖栨憳瑕� 鈥� 甯姪璇婃柇缂哄け鐨勫寘瑁�
+            var allPkgs = YooAssetPackageConfig.AllPackages;
+            var missingPkgs = new System.Collections.Generic.List<string>();
+            foreach (var p in allPkgs)
+            {
+                if (!_packages.ContainsKey(p))
+                    missingPkgs.Add(p);
+            }
+            if (missingPkgs.Count > 0)
+            {
+                Debug.LogError($"[YooAssetService] WARNING: {missingPkgs.Count} package(s) FAILED to initialize: [{string.Join(", ", missingPkgs)}]. " +
+                    $"Assets routed to these packages will fail to load! Check earlier console errors for SimulateBuild failures.");
+            }
+            Debug.Log($"[YooAssetService] Initialized {_packages.Count}/{allPkgs.Length} packages with PlayMode={playMode}. " +
+                $"Active: [{string.Join(", ", _packages.Keys)}]");
         }
 
         /// <summary>
@@ -129,6 +187,7 @@
 
             // 浼樺厛澶嶇敤宸插瓨鍦ㄧ殑鍖呰9锛堝彲鑳界敱 Launch 闃舵鍒涘缓锛�
             var package = YooAssets.TryGetPackage(packageName);
+            bool needManifest = false;
             if (package == null)
             {
                 package = YooAssets.CreatePackage(packageName);
@@ -141,9 +200,17 @@
                     Debug.LogError($"[YooAssetService] Initialize package '{packageName}' failed: {initOp.Error}");
                     throw new InvalidOperationException($"YooAsset package '{packageName}' initialization failed: {initOp.Error}");
                 }
+                needManifest = true;
             }
 
             _packages[packageName] = package;
+
+            // 纭繚 ActiveManifest 宸插姞杞�
+            if (needManifest)
+            {
+                await RequestVersionAndUpdateForPackageAsync(packageName, package);
+            }
+
             Debug.Log($"[YooAssetService] Package '{packageName}' initialized.");
         }
 
@@ -206,6 +273,40 @@
                 }
                 default:
                     throw new ArgumentOutOfRangeException(nameof(playMode), playMode, "Unsupported PlayMode.");
+            }
+        }
+
+        /// <summary>
+        /// 瀵瑰崟涓寘瑁规墽琛岀増鏈姹傚拰 Manifest 鏇存柊銆�
+        /// 鎵�鏈夎繍琛屾ā寮忥紙鍖呮嫭 EditorSimulateMode锛夐兘闇�瑕佹姝ラ鏉ュ~鍏� ActiveManifest銆�
+        /// </summary>
+        private async UniTask RequestVersionAndUpdateForPackageAsync(string pkgName, ResourcePackage package)
+        {
+            try
+            {
+                var versionOp = package.RequestPackageVersionAsync();
+                await versionOp.ToUniTask();
+
+                if (versionOp.Status != EOperationStatus.Succeed)
+                {
+                    Debug.LogWarning($"[YooAssetService] RequestPackageVersion failed for '{pkgName}': {versionOp.Error}");
+                    return;
+                }
+
+                var manifestOp = package.UpdatePackageManifestAsync(versionOp.PackageVersion);
+                await manifestOp.ToUniTask();
+
+                if (manifestOp.Status != EOperationStatus.Succeed)
+                {
+                    Debug.LogWarning($"[YooAssetService] UpdatePackageManifest failed for '{pkgName}': {manifestOp.Error}");
+                    return;
+                }
+
+                Debug.Log($"[YooAssetService] Package '{pkgName}' manifest loaded (version={versionOp.PackageVersion}).");
+            }
+            catch (Exception ex)
+            {
+                Debug.LogWarning($"[YooAssetService] RequestVersionAndUpdate for '{pkgName}' exception: {ex.Message}");
             }
         }
 
@@ -277,7 +378,11 @@
             if (_packages.TryGetValue(packageName, out var package))
                 return package;
 
-            // 璺敱鍒扮殑鍖呭皻鏈垵濮嬪寲锛屽洖閫�鍒伴粯璁ゅ寘
+            // 璺敱鍒扮殑鍖呭皻鏈垵濮嬪寲锛屽洖閫�鍒伴粯璁ゅ寘 鈥� 鍙戝嚭鏄庣‘璀﹀憡
+            Debug.LogWarning($"[YooAssetService] Package '{packageName}' not available for location '{location}'. " +
+                $"Available packages: [{string.Join(", ", _packages.Keys)}]. " +
+                $"Falling back to default package '{_defaultPackage?.PackageName ?? "NULL"}'." +
+                $"\n  鈫� This usually means SimulateBuild failed for '{packageName}'. Check earlier console errors.");
             return _defaultPackage;
         }
 

--
Gitblit v1.8.0