using Newtonsoft.Json; using Spine.Unity; using System; using System.Collections; using System.Collections.Generic; using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.InputSystem; using UnityEngine.ResourceManagement.AsyncOperations; using static UnityEngine.AddressableAssets.Addressables; [Serializable] public class AudioResourcesData { public int audioID; public string audioResourcesPath; public static Dictionary name_IDDic=new Dictionary(); public static Dictionary audioClipDic=new Dictionary(); static Dictionary audioClipDefaultDic=new Dictionary(); static Dictionary audioClipGameDic=new Dictionary(); const string Audio_AALabel="Audio"; static AudioResourcesData() { //这里要添加默认的音效 背景 按钮点击 LoadDefaultAudioGame(); } static async void LoadDefaultAudioGame() { string prefabFishPath = Resources.Load("tbaudio").text; var v = JsonConvert.DeserializeObject>(prefabFishPath); foreach (var item in v) { Debug.Log("加载文件音频ID: " + item.audioID); Debug.Log(item.audioID + "加载文件音频路径: " + item.audioResourcesPath); name_IDDic[item.audioResourcesPath]=item.audioID; } var keys = new List { Audio_AALabel, "Default" }; await Addressables.LoadAssetsAsync(keys, audio => { Debug.Log("加载音频: " + audio.name); if (name_IDDic.ContainsKey(audio.name)) { Debug.Log("加载音频ID: " + name_IDDic[audio.name]); audioClipDefaultDic.Add(name_IDDic[audio.name],audio); } }, MergeMode.Intersection).Task; foreach (var item in audioClipDefaultDic) { audioClipDic.Add(item.Key, item.Value); } Debug.Log("加载了:"+ audioClipDic.Count); } public static async Task LoadAudioGame() { GameType gameType=GameManager.Instance.gameData.currGameType; var keys = new List { Audio_AALabel, gameType.ToString() }; await Addressables.LoadAssetsAsync(keys, audio => { //Debug.Log("加载音频: " + audio.name); //Debug.Log("加载音频ID: " + name_IDDic[audio.name]); if (name_IDDic.ContainsKey(audio.name)) { audioClipGameDic[name_IDDic[audio.name]]= audio; } }, MergeMode.Intersection).Task; audioClipDic=new Dictionary(audioClipDefaultDic); foreach (var item in audioClipGameDic) { audioClipDic[item.Key]=item.Value; } Debug.Log("加载了:"+ audioClipDic.Count); } public static async Task UnLoadAudioGame() { GameType gameType = GameManager.Instance.gameData.currGameType; var keys = new List { Audio_AALabel, gameType.ToString() }; // 加载对应的句柄(只是为了拿到引用,之后释放) AsyncOperationHandle> handle = Addressables.LoadAssetsAsync(keys, null, MergeMode.Intersection); await handle.Task; // 遍历卸载对应的音频 foreach (var audio in handle.Result) { if (name_IDDic.ContainsKey(audio.name)) { int id = name_IDDic[audio.name]; if (audioClipGameDic.ContainsKey(id)) { audioClipGameDic.Remove(id); Debug.Log($"卸载音频: {audio.name} (ID={id})"); } } } // 释放 Addressables 资源句柄 Addressables.Release(handle); // 重建总字典:保留默认音频 + 剩余游戏音频 audioClipDic = new Dictionary(audioClipDefaultDic); foreach (var item in audioClipGameDic) { audioClipDic[item.Key] = item.Value; } Debug.Log("卸载完成,当前音频数量:" + audioClipDic.Count); } }