using System; using Cysharp.Threading.Tasks; using UnityEngine; using YooAsset; namespace Stary.Evo.TableTextConversion { public interface IAudioTableDataCore : ITableDataCore { UniTask GetAudioInfo(string auid); UniTask GetAudioClip(string auid); } public class AudioTableDataCore : IAudioTableDataCore, IDisposable { private Stary.Evo.TableTextConversion.AudioTableData audioTableData; public string TableName => "Config_AudioTableData"; public bool IsLoad { get; set; } public async UniTask LoadData() { var audioHandle = YooAssets.LoadAssetAsync(TableName); await audioHandle.Task; audioTableData = audioHandle.GetAssetObject(); if (audioTableData == null) { Debug.LogError($"加载音频表失败,请排查config下是否存在【{TableName}】表"); return; } IsLoad = true; } /// /// 获取音频数据 /// /// /// public async UniTask GetAudioInfo(string auid) { if (!IsLoad) { await LoadData(); } var info = audioTableData.infos.Find(x => x.auid == auid); if (info != null && !info.filename.Contains("Audios")) { info.filename = "Audios_" + info.filename; } return info; } /// /// 获取音频 /// /// /// public async UniTask GetAudioClip(string auid) { if (!IsLoad) { await LoadData(); } var info = await GetAudioInfo(auid); var handle = YooAssets.LoadAssetAsync(info.filename); await handle.Task; if (handle.Status == EOperationStatus.Succeed) { return handle.GetAssetObject(); } else { Debug.LogError( $"加载音频失败,错误的id为:{auid},错误的音频名称为:{info.filename},错误的错误信息为:{handle.LastError}"); return null; } } public void Dispose() { audioTableData = null; } } }