Files
plugin-library/Assets/05.TableTextConversion/RunTime/Core/AudioTableDataCore.cs

96 lines
2.6 KiB
C#
Raw Normal View History

2025-09-04 11:43:35 +08:00
using System;
using Cysharp.Threading.Tasks;
using UnityEngine;
2025-11-12 14:33:55 +08:00
#if YooAssets
2025-09-04 11:43:35 +08:00
using YooAsset;
2025-11-12 14:33:55 +08:00
#endif
2025-09-04 11:43:35 +08:00
2025-09-10 11:15:18 +08:00
namespace Stary.Evo.TableTextConversion
2025-09-04 11:43:35 +08:00
{
2025-09-10 11:15:18 +08:00
public interface IAudioTableDataCore : ITableDataCore
2025-09-04 11:43:35 +08:00
{
2025-11-12 14:22:04 +08:00
UniTask<AudioEntity> GetAudioAssetInfo(string auid);
UniTask<AudioClip> GetAudioAssetClip(string auid);
2025-09-04 11:43:35 +08:00
}
2025-11-12 14:22:04 +08:00
#if YooAssets
2025-09-10 11:15:18 +08:00
public class AudioTableDataCore : IAudioTableDataCore, IDisposable
2025-09-04 11:43:35 +08:00
{
2025-11-12 14:22:04 +08:00
private AudioTableData audioTableData;
2025-09-04 11:43:35 +08:00
public string TableName => "Config_AudioTableData";
public bool IsLoad { get; set; }
public async UniTask LoadData()
{
var audioHandle =
2025-11-12 14:22:04 +08:00
YooAssets.LoadAssetAsync<AudioTableData>(TableName);
2025-09-04 11:43:35 +08:00
await audioHandle.Task;
2025-11-12 14:22:04 +08:00
audioTableData = audioHandle.GetAssetObject<AudioTableData>();
2025-09-04 11:43:35 +08:00
if (audioTableData == null)
{
Debug.LogError($"加载音频表失败请排查config下是否存在【{TableName}】表");
return;
}
2025-11-12 14:22:04 +08:00
2025-09-04 11:43:35 +08:00
IsLoad = true;
}
/// <summary>
/// 获取音频数据
/// </summary>
/// <param name="auid"></param>
/// <returns></returns>
2025-11-12 14:22:04 +08:00
public async UniTask<AudioEntity> GetAudioAssetInfo(string auid)
2025-09-04 11:43:35 +08:00
{
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>
2025-11-12 14:22:04 +08:00
public async UniTask<AudioClip> GetAudioAssetClip(string auid)
2025-09-04 11:43:35 +08:00
{
if (!IsLoad)
{
await LoadData();
}
2025-11-12 14:22:04 +08:00
var info = await GetAudioAssetInfo(auid);
2025-09-04 11:43:35 +08:00
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;
}
}
2025-11-12 14:22:04 +08:00
#endif
2025-09-04 11:43:35 +08:00
}