在Unity3d中下载纹理时出现InvalidOperationException

l7wslrjt  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(486)

我试图在我的统一项目中使用谷歌Map纹理。但我面临着同样的问题。
我检查了呼叫的记录网址,当我在浏览器中使用它时,它工作正常。我正在尝试将该纹理加载到立方体中。
这是我正在使用的代码。有人能告诉我我做错了什么,以及如何纠正吗?如果你需要更多的细节,请告诉我。

方法1 -使用WWW方法:

string googleStaticMapsURL = "https://maps.googleapis.com/maps/api/staticmap?center=42.49414,-83.40547&size=1024x1024&scale=2&maptype=roadmap&markers=size:mid|color:orange|label:abc|44.49414,-83.40547";

WWW req = new WWW(googleStaticMapsURL);

cubeObject.SetActive (true);

// Create a texture in DXT1 format
cubeObject.GetComponent<Renderer>().material.mainTexture = 
                new Texture2D(size, size, TextureFormat.DXT1, false);

while (!req.isDone) {
    Debug.Log ("req.isdone is false");
    yield return 0;
}

if (req.error == null) {
    Debug.Log ("Response form Google maps texture service:: ");
    req.LoadImageIntoTexture ((Texture2D)cubeObject.GetComponent<Renderer> ().material.mainTexture);
}  else {
    Debug.Log ("Google maps.. Req.error is:: " + req.error);
}

错误:不支援的URL。
我在一些帖子中读到WWW在iOS中运行不好,所以我尝试UnityWebRequest。

方法2 -使用UnityWebRequest方法:

string googleStaticMapsURL = "https://maps.googleapis.com/maps/api/staticmap?center=42.49414,-83.40547&size=1024x1024&scale=2&maptype=roadmap&markers=size:mid|color:orange|label:abc|44.49414,-83.40547";

UnityWebRequest www = UnityWebRequest.Get(googleStaticMapsURL);
DownloadHandlerTexture textD = new DownloadHandlerTexture ();
www.downloadHandler = textD;

yield return www.Send();

if (www.isError) {
    Debug.Log ("Error in Google maps web service::" + www.error);
}  else {
    Debug.Log ("Time1:: " + Time.time + ".. isDone::" + www.isDone);
    yield return new WaitForSeconds(3); //wait for 3 secs
    Debug.Log ("Time2:: " + Time.time + ".. isDone::" + www.isDone);
    while (!www.isDone) {
        Debug.Log ("www.isdone is false");
    }
    // Show results as text
    //sphereObject.GetComponent<Renderer>().material.mainTexture = 
    //                          new Texture2D(size, size, TextureFormat.DXT1, false);
    Debug.Log("Setting Texture!!");
    Debug.Log("Response form Google maps texture service:: "+ textD.texture.height);
    cubeObject.SetActive (true);
    //cubeObject.transform.parent.gameObject.SetActive (true);
    cubeObject.GetComponent<Renderer>().material.mainTexture = textD.texture;
}

错误:无效操作异常:纹理尚未完成下载

但我可以看到www.isDone打印为真。你能帮我得到这个修复吗?
另外,我使用的是https版本的谷歌Map网址,但我仍然在控制台中看到下面的警告。打印的网址只显示https协议。

您正在使用通过http下载。Unity目前将NSAllowsArbitraryLoads添加到Info.plist以简化转换,但它将很快被删除。请考虑更新到https。

50few1ms

50few1ms1#

我不知道为什么它不能与您一起工作,只是将此脚本附加到多维数据集对象,它工作正常:

public class TextureLoader : MonoBehaviour 
{

    IEnumerator Start()
    {
        string path = "https://maps.googleapis.com/maps/api/staticmap?center=42.49414,-83.40547&size=1024x1024&scale=2&maptype=roadmap&markers=size:mid|color:orange|label:abc|44.49414,-83.40547";
        UnityWebRequest www = UnityWebRequest.Get(path);
        DownloadHandlerTexture textD = new DownloadHandlerTexture ();
        www.downloadHandler = textD;

        yield return www.Send();

        while (!www.isDone)
        {
            yield return www;
        }

        if (www.isError) 
        {
            Debug.Log ("Error in Google maps web service::" + www.error);
        }  
        else 
        {
            GetComponent<Renderer>().material.mainTexture = textD.texture;
        }
    }
}

相关问题