问题描述
string path;
AudioSource audio = GetComponent<AudioSource>();
path = EditorUtility.OpenFilePanel("Audio Files","","wav");
if (path != null)
{
using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip("file:///" + path,AudioType.WAV))
if (www.result == UnityWebRequest.Result.ConnectionError)
{
Debug.LogError(www.error);
}
else
{
//Debug.Log(www.url);
audio.clip = DownloadHandlerAudioClip.GetContent(www);
audio.Play();
yield return www.SendWebRequest();
}
}
执行此代码块后,在播放模式下,文件选择器成功运行,但在选择音频文件后,控制台抛出 InvalidOperationException:无法从未完成的 UnityWebRequest 对象获取内容 由这条线引起的
audio.clip = DownloadHandlerAudioClip.GetContent(www);
我的假设是我不知何故错过了从文件选择器获取音频文件路径和使用路径传输实际音频剪辑之间的步骤。
Debug.Log(www.url) 将成功打印文件 URI 方案。
解决方法
通常注意您的 using
.. 您应该将它包装在 { }
中以提高可读性并防止意外行为
然后出于某种原因你这样做了
yield return www.SendWebRequest();
after 尝试访问结果.... 此行应该是 using
行之后的第一行 .. 在尝试检查请求是否正确发送并尝试访问之前下载内容
using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip("file:///" + path,AudioType.WAV))
{
yield return www.SendWebRequest();
if (www.result == UnityWebRequest.Result.ConnectionError)
{
Debug.LogError(www.error);
}
else
{
audio.clip = DownloadHandlerAudioClip.GetContent(www);
audio.Play();
}
}