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;
///
/// 出场音频
///
public List showAudio;
///
/// 移动音频
///
public List moveAudio;
///
/// 死亡音效 1,2,3
///
public List dieAudio;
///
/// 爆奖音效
///
public Dictionary dieGlodAduio;
const string prefabFish_AALabel="FishPrefab";
const string dieSpine_AALabel = "DieSpine";
const string Sprite_AALabel = "TuJian";
private static Dictionary FishResourcesPrefabsDic ;//prefabpath--id
private static Dictionary FishResourcesSpineDieDic ;//dieSpinepath--id
private static Dictionary FishResourcesSpriteDic;//Spritepath--id
static FishResourcesData()
{
string prefabFishPath = Resources.Load("tbfishresources").text;
var v = JsonConvert.DeserializeObject>(prefabFishPath);
FishResourcesPrefabsDic=new Dictionary();
fishResourcesDatasDic = new Dictionary();
FishResourcesSpineDieDic = new Dictionary();
FishResourcesSpriteDic = 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);
FishResourcesSpriteDic.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
public static Dictionary fishResourcesSpritesDic;//id--Sprite
private static Dictionary diePrefabDic;//id--SkeletonDataAsset
public static async void LoadFishAssetsData()
{
if (fishPrefabDic != null)
return;
fishPrefabDic = new Dictionary();
diePrefabDic= new Dictionary();
fishResourcesSpritesDic = 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];
}
}, MergeMode.Intersection).Task;
Debug.Log($"加载完成,共 {fishPrefabDic.Count} 个鱼Prefab");
keys = new List {dieSpine_AALabel,/* GameManager.Instance.gameData.currGameType.ToString()*/GameManager.Instance.gameData.currGameType.ToString() };
await Addressables.LoadAssetsAsync(keys, data =>
{
if (FishResourcesSpineDieDic.ContainsKey(data.name))
{
diePrefabDic.Add(FishResourcesSpineDieDic[data.name], data); }
},MergeMode.Intersection).Task;
Debug.Log($"加载完成,共 {diePrefabDic.Count} 个鱼死亡动效");
keys = new List { Sprite_AALabel,/* GameManager.Instance.gameData.currGameType.ToString()*/GameManager.Instance.gameData.currGameType.ToString() };
await Addressables.LoadAssetsAsync(keys, data =>
{
if (FishResourcesSpriteDic.ContainsKey(data.name))
{
fishResourcesSpritesDic.Add(FishResourcesSpriteDic[data.name], data);
}
}, MergeMode.Intersection).Task;
Debug.Log($"加载完成,共 {fishResourcesSpritesDic.Count} 个鱼Sprite");
}
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;
}
}
}