Files
plugin-library/Assets/05.TableTextConversion/RunTime/Core/AudioTableDataCore.cs
2025-11-12 14:22:04 +08:00

94 lines
2.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using Cysharp.Threading.Tasks;
using UnityEngine;
using YooAsset;
namespace Stary.Evo.TableTextConversion
{
public interface IAudioTableDataCore : ITableDataCore
{
UniTask<AudioEntity> GetAudioAssetInfo(string auid);
UniTask<AudioClip> GetAudioAssetClip(string auid);
}
#if YooAssets
public class AudioTableDataCore : IAudioTableDataCore, IDisposable
{
private AudioTableData audioTableData;
public string TableName => "Config_AudioTableData";
public bool IsLoad { get; set; }
public async UniTask LoadData()
{
var audioHandle =
YooAssets.LoadAssetAsync<AudioTableData>(TableName);
await audioHandle.Task;
audioTableData = audioHandle.GetAssetObject<AudioTableData>();
if (audioTableData == null)
{
Debug.LogError($"加载音频表失败请排查config下是否存在【{TableName}】表");
return;
}
IsLoad = true;
}
/// <summary>
/// 获取音频数据
/// </summary>
/// <param name="auid"></param>
/// <returns></returns>
public async UniTask<AudioEntity> GetAudioAssetInfo(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;
}
/// <summary>
/// 获取音频
/// </summary>
/// <param name="auid"></param>
/// <returns></returns>
public async UniTask<AudioClip> GetAudioAssetClip(string auid)
{
if (!IsLoad)
{
await LoadData();
}
var info = await GetAudioAssetInfo(auid);
var handle = YooAssets.LoadAssetAsync<AudioClip>(info.filename);
await handle.Task;
if (handle.Status == EOperationStatus.Succeed)
{
return handle.GetAssetObject<AudioClip>();
}
else
{
Debug.LogError(
$"加载音频失败,错误的id为:{auid},错误的音频名称为:{info.filename},错误的错误信息为:{handle.LastError}");
return null;
}
}
public void Dispose()
{
audioTableData = null;
}
}
#endif
}