using Newtonsoft.Json; using Spine.Unity; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AddressableAssets; using static UnityEngine.AddressableAssets.Addressables; [Serializable] public class FishResourcesData { public int fishNumber; public string prefabFishResourcesPath; public string dieEffectAssets; const string prefabFish_AALabel="FishPrefab"; const string dieSpine_AALabel = "DieSpine"; private static Dictionary FishResourcesPrefabsDic ;//prefabpath--id private static Dictionary FishResourcesSpineDieDic ;//dieSpinepath--id static FishResourcesData() { string prefabFishPath = Resources.Load("tbfishresources").text; var v = JsonConvert.DeserializeObject>(prefabFishPath); FishResourcesPrefabsDic=new Dictionary(); fishResourcesDatasDic = new Dictionary(); FishResourcesSpineDieDic = new Dictionary(); foreach (var item in v) { if (item.prefabFishResourcesPath!=null&& item.prefabFishResourcesPath != "") { Debug.Log($"添加鱼资源数据: {item.fishNumber} - {item.prefabFishResourcesPath}"); FishResourcesPrefabsDic.Add(item.prefabFishResourcesPath, item.fishNumber); if (item.dieEffectAssets!=null&&item.dieEffectAssets!="") { FishResourcesSpineDieDic.Add(item.dieEffectAssets, item.fishNumber); } fishResourcesDatasDic.Add(item.fishNumber, item); } } } private static Dictionary fishPrefabDic;//id--prefabs public static Dictionary fishResourcesDatasDic;//id--FishResourcesData private static Dictionary diePrefabDic;//id--SkeletonDataAsset public static async void LoadFishAssetsData() { if (fishPrefabDic != null) return; fishPrefabDic = new Dictionary(); diePrefabDic= new Dictionary(); var keys = new List { prefabFish_AALabel, GameManager.Instance.gameData.currGameType.ToString() }; await Addressables.LoadAssetsAsync(keys, prefab => { if (FishResourcesPrefabsDic.ContainsKey(prefab.name)) { fishPrefabDic.Add(FishResourcesPrefabsDic[prefab.name], prefab); prefab.GetComponent().fishTypeID = FishResourcesPrefabsDic[prefab.name].ToString(); } }, MergeMode.Intersection).Task; keys = new List {dieSpine_AALabel,/* GameManager.Instance.gameData.currGameType.ToString()*/"XJMH" }; await Addressables.LoadAssetsAsync(keys, data => { if (FishResourcesSpineDieDic.ContainsKey(data.name)) { diePrefabDic.Add(FishResourcesSpineDieDic[data.name], data); } },MergeMode.Intersection).Task; Debug.Log($"加载完成,共 {fishPrefabDic.Count} 个鱼Prefab"); } public static GameObject GetFishPrefab(int fishNumber) { if (fishPrefabDic != null && fishPrefabDic.ContainsKey(fishNumber)) { return fishPrefabDic[fishNumber]; } else { Debug.LogError($"鱼Prefab未找到: {fishNumber}"); return null; } } public static SkeletonDataAsset GetFishDieSpine(int fishNumber) { if (diePrefabDic != null && diePrefabDic.ContainsKey(fishNumber)) { return diePrefabDic[fishNumber]; } else { Debug.LogError($"鱼死亡动效未找到: {fishNumber}"); return null; } } }