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

问题描述

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...