从 Unity 中的打开文件面板中选择文件后,UnityWebRequest 未完成

UnityWebRequest is not completed after selecting a file from Open File Panel in Unity

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();           
    }
}