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