快速加载后,保证GameObject 与 Asset 一一对应

This commit is contained in:
fatiao 2025-03-06 22:26:04 +08:00
parent 910693027c
commit c071ee7b89
3 changed files with 25 additions and 7 deletions

View File

@ -46,7 +46,7 @@ public class RoTool : EditorWindow
AssetDatabase.Refresh();
}
private static HashSet<string> s_ValidExtMap = new HashSet<string>() { ".prefab", ".txt", ".xml", ".txt", ".lua", ".csv", ".ogg", ".wav", ".ttf", ".bytes", ".pb" };
private static HashSet<string> s_ValidExtMap = new HashSet<string>() { ".prefab", ".txt", ".xml", ".txt", ".lua", ".luac", ".csv", ".ogg", ".wav", ".ttf", ".bytes", ".pb" };
private static List<string> getAllFilesPathEX(string path, string searchPattern = "*.*", SearchOption searchOption = SearchOption.AllDirectories)
{
List<string> all = new List<string>();

View File

@ -1217,25 +1217,35 @@ public class AssetsMgr : SingletonMono<AssetsMgr>
else
{
string path = "";
int loadCount = 0;
Dictionary<string,GameObject> assetDict = new Dictionary<string,GameObject>();
for (int i = 0; i < assetName.Length; ++i)
{
if (!string.IsNullOrEmpty(assetName[i]))
var currAssetName = assetName[i];
if (!string.IsNullOrEmpty(currAssetName))
{
if (!string.IsNullOrEmpty(pathName))
{
path = string.Format("{0}/{1}.prefab", pathName, assetName[i]);
path = string.Format("{0}/{1}.prefab", pathName, currAssetName);
}
else
{
path = string.Format("{0}.prefab", assetName[i]);
path = string.Format("{0}.prefab", currAssetName);
}
//GameObject g = UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>(path);
var handle = Addressables.LoadAssetAsync<GameObject>(path);
yield return handle;
gos.Add(handle.Result);
Addressables.LoadAssetAsync<GameObject>(path).Completed += handle =>
{
assetDict[currAssetName] = handle.Result;
loadCount++;
};
}
}
while (loadCount < assetName.Length) { yield return null; }
for (int i = 0; i < assetName.Length; ++i)
{
gos.Add(assetDict[assetName[i]]);
}
}
callback.DynamicInvoke(gos, seqId, pathName, assetName);
}

View File

@ -87,6 +87,7 @@ public class BattlePrepareManager : Singleton<BattlePrepareManager>
if(p.Value.Count > 0)
{
loadtaskCnt++;
Debug.Log("[StartLoad] " + p.Key + " : " + string.Join(",", p.Value.ToArray()));
ResourceMgr.Instance.LoadAsset<List<GameObject>>(OnLoadAssetsCompleted, p.Key, p.Value.ToArray());
}
}
@ -95,6 +96,7 @@ public class BattlePrepareManager : Singleton<BattlePrepareManager>
if (mPrecacheCtrls.Count > 0)
{
loadtaskCnt++;
Debug.Log("[StartLoad] " + Constants.AnimatorPath + " : " + string.Join(",", mPrecacheCtrls.ToArray()));
ResourceMgr.Instance.LoadAsset<List<RuntimeAnimatorController>>(OnLoadAssetsCompleted, Constants.AnimatorPath, mPrecacheCtrls.ToArray());
mPrecacheCtrls.Clear();
}
@ -102,6 +104,7 @@ public class BattlePrepareManager : Singleton<BattlePrepareManager>
if(mPrecacheUIPrefabs.Count > 0)
{
loadtaskCnt++;
Debug.Log("[StartLoad] " + Constants.UIPath + " : " + string.Join(",", mPrecacheUIPrefabs.ToArray()));
ResourceMgr.Instance.LoadAsset<List<GameObject>>(OnLoadAssetsCompleted, Constants.UIPath, mPrecacheUIPrefabs.ToArray());
mPrecacheUIPrefabs.Clear();
}
@ -109,6 +112,7 @@ public class BattlePrepareManager : Singleton<BattlePrepareManager>
if (mPrecacheHeroModels.Count > 0)
{
loadtaskCnt++;
Debug.Log("[StartLoad] " + Constants.ModelPath + " : " + string.Join(",", mPrecacheHeroModels.ToArray()));
ResourceMgr.Instance.LoadAsset<List<GameObject>>(OnLoadAssetsCompleted, Constants.ModelPath, mPrecacheHeroModels.ToArray());
mPrecacheHeroModels.Clear();
}
@ -116,6 +120,7 @@ public class BattlePrepareManager : Singleton<BattlePrepareManager>
if(mPrecacheMonsterModels.Count > 0)
{
loadtaskCnt++;
Debug.Log("[StartLoad] " + Constants.ModelPath + " : " + string.Join(",", mPrecacheMonsterModels.ToArray()));
ResourceMgr.Instance.LoadAsset<List<GameObject>>(OnLoadAssetsCompleted, Constants.ModelPath, mPrecacheMonsterModels.ToArray());
mPrecacheMonsterModels.Clear();
}
@ -123,6 +128,7 @@ public class BattlePrepareManager : Singleton<BattlePrepareManager>
if(mPrecacheParterModels.Count > 0)
{
loadtaskCnt++;
Debug.Log("[StartLoad] " + Constants.ModelPath + " : " + string.Join(",", mPrecacheParterModels.ToArray()));
ResourceMgr.Instance.LoadAsset<List<GameObject>>(OnLoadAssetsCompleted, Constants.ModelPath, mPrecacheParterModels.ToArray());
mPrecacheParterModels.Clear();
}
@ -130,6 +136,7 @@ public class BattlePrepareManager : Singleton<BattlePrepareManager>
if(mPrecachePetModels.Count > 0)
{
loadtaskCnt++;
Debug.Log("[StartLoad] " + Constants.ModelPath + " : " + string.Join(",", mPrecachePetModels.ToArray()));
ResourceMgr.Instance.LoadAsset<List<GameObject>>(OnLoadAssetsCompleted, Constants.ModelPath, mPrecachePetModels.ToArray());
mPrecachePetModels.Clear();
}
@ -541,6 +548,7 @@ public class BattlePrepareManager : Singleton<BattlePrepareManager>
ResourceMgr.Instance.RecycleGO(packageName, assetNames[idx], instGo);
});
}
Debug.Log($"[OnLoadAssetsCompleted] {packageName} : {string.Join(',', assetNames)}");
CheckLoadStatus();
}