c# - 如何从产量返回中返回音频剪辑?
问题描述
我想写一个从我的加载音频剪辑的方法
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 新的 async-await 集成
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);
}
}
请注意,这是我在浏览器中编写的伪代码,因此它可能无法通过复制粘贴直接编译。
推荐阅读
- python - 如何从继承类覆盖超类的子类的抽象方法?
- matlab - 将 64 个图形分解为一组子图
- ruby-on-rails - My nested cocoon form only accepts the last line of my dynamic table
- python - 如何使用字典使用询问的输入输出字典键
- java - BinaryTree 期望 Comparable,另一个实现 Comparable 的子类不起作用
- html - 如何在 HTML 中的 Node 中显示数组中的每个元素?
- typescript - 是否有一种类型级别的方法可以从类中提取具有默认值的属性?
- asp.net-core - 添加 ResponseCache 属性时记录缓存控制警告
- php - 如何绕过网站重定向屏幕?
- express - 在快速应用程序中使用压缩中间件不起作用