如何解决如何从良率回报中返回audioClip?
我想写一种从我的加载音频剪辑的方法
IEnumerator GetAudioClip(string filePath)
{
using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(filePath,AudioType.MPEG))
{
yield return www.SendWebRequest();
if (www.isNetworkError)
{
Debug.Log(www.error);
}
else
{
AudioClip ac= DownloadHandlerAudioClip.GetContent(www);
}
}
}
我希望我的方法返回audioClip 我该怎么做?我调查了一些,有一些复杂的类我没听懂
解决方法
从技术上讲,由于协程在Unity中的实现方式,您无法做到。 有几种解决方法。这是我头顶上的两个:
1.IEnumerator协程,它接收变量委托作为返回方法
IEnumerator GetAudioClip(string filePath,Action<AudioClip> callback)
{
if (callback == null) { yield break; }
using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(filePath,AudioType.MPEG))
{
yield return www.SendWebRequest();
if (www.isNetworkError)
{
Debug.Log(www.error);
callback(null);
}
else
{
AudioClip ac= DownloadHandlerAudioClip.GetContent(www);
callback(ac);
}
}
}
2。使用Unity的新异步等待集成
public async Task<AudioClip> GetAudioClip(string filePath){
using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(filePath,AudioType.MPEG))
{
var result = www.SendWebRequest();
while (!result.isDone) { await Task.Delay(100); }
if (www.isNetworkError)
{
Debug.Log(www.error);
return null;
}
else
{
return DownloadHandlerAudioClip.GetContent(www);
}
}
请记住,这是我在浏览器中编写的伪代码,因此它可能无法通过复制粘贴直接编译。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。