148 lines
5.3 KiB
C#
148 lines
5.3 KiB
C#
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<string, int> name_IDDic=new Dictionary<string, int>();
|
|
public static Dictionary<int, AudioClip> audioClipDic=new Dictionary<int, AudioClip>();
|
|
static Dictionary<int, AudioClip> audioClipDefaultDic=new Dictionary<int, AudioClip>();
|
|
static Dictionary<int, AudioClip> audioClipGameDic=new Dictionary<int, AudioClip>();
|
|
const string Audio_AALabel="Audio";
|
|
static AudioResourcesData()
|
|
{
|
|
|
|
|
|
//这里要添加默认的音效 背景 按钮点击
|
|
LoadDefaultAudioGame();
|
|
}
|
|
static async void LoadDefaultAudioGame()
|
|
{
|
|
string prefabFishPath = Resources.Load<TextAsset>("tbaudio").text;
|
|
var v = JsonConvert.DeserializeObject<List<AudioResourcesData>>(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<string> { Audio_AALabel, "Default" };
|
|
await Addressables.LoadAssetsAsync<AudioClip>(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<string> { Audio_AALabel, gameType.ToString() };
|
|
// await Addressables.LoadAssetsAsync<AudioClip>(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<int, AudioClip>(audioClipDefaultDic);
|
|
// foreach (var item in audioClipGameDic)
|
|
// {
|
|
// audioClipDic[item.Key]=item.Value;
|
|
// }
|
|
// Debug.Log("加载了:"+ audioClipDic.Count);
|
|
|
|
//}
|
|
public static async Task LoadAudioGame()
|
|
{
|
|
GameType gameType = GameManager.Instance.gameData.currGameType;
|
|
var keys = new List<string> { Audio_AALabel, gameType.ToString() };
|
|
|
|
try
|
|
{
|
|
await Addressables.LoadAssetsAsync<AudioClip>(keys, audio =>
|
|
{
|
|
if (name_IDDic != null && name_IDDic.ContainsKey(audio.name))
|
|
{
|
|
audioClipGameDic[name_IDDic[audio.name]] = audio;
|
|
}
|
|
}, MergeMode.Union).Task;
|
|
|
|
audioClipDic = new Dictionary<int, AudioClip>();
|
|
if (audioClipDefaultDic != null)
|
|
{
|
|
foreach (var item in audioClipDefaultDic)
|
|
audioClipDic[item.Key] = item.Value;
|
|
}
|
|
foreach (var item in audioClipGameDic)
|
|
{
|
|
audioClipDic[item.Key] = item.Value;
|
|
}
|
|
Debug.Log("加载音频数量: " + audioClipDic.Count);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Debug.LogError($"加载游戏音频失败: {e.Message}");
|
|
}
|
|
}
|
|
public static async Task UnLoadAudioGame()
|
|
{
|
|
GameType gameType = GameManager.Instance.gameData.currGameType;
|
|
var keys = new List<string> { Audio_AALabel, gameType.ToString() };
|
|
|
|
// 加载对应的句柄(只是为了拿到引用,之后释放)
|
|
AsyncOperationHandle<IList<AudioClip>> handle = Addressables.LoadAssetsAsync<AudioClip>(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<int, AudioClip>(audioClipDefaultDic);
|
|
foreach (var item in audioClipGameDic)
|
|
{
|
|
audioClipDic[item.Key] = item.Value;
|
|
}
|
|
|
|
Debug.Log("卸载完成,当前音频数量:" + audioClipDic.Count);
|
|
}
|
|
|
|
|
|
}
|