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