前提・実現したいこと
以下サイトを参考に、Google Static Maps APIを利用して地図画像を取得し、取得した画像をUnity上のオブジェクトに貼り付けようとしたところ以下のエラーメッセージが出てしまいました。
参考リンク
発生している問題・エラーメッセージ
InvalidOperationException: Texture has not yet finished downloading UnityEngine.Networking.DownloadHandlerTexture.InternalGetTexture () (at /Users/builduser/buildslave/unity/build/Modules/UnityWebRequestTexture/Public/DownloadHandlerTexture.bindings.cs:58) UnityEngine.Networking.DownloadHandlerTexture.get_texture () (at /Users/builduser/buildslave/unity/build/Modules/UnityWebRequestTexture/Public/DownloadHandlerTexture.bindings.cs:42) GetFoodstoreInfo+<Download>d__29.MoveNext () (at Assets/Scripts/GetFoodstoreInfo.cs:239) UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at /Users/builduser/buildslave/unity/build/Runtime/Export/Scripting/Coroutines.cs:17)
該当のソースコード
C#
1//google map api 2 private float lat = 35.6259034f; //緯度 3 private float lng = 139.7268499f; //経度 4 string MAPKEY = "自分のAPIキー"; 5 public int zoom = 15; 6 string MAPBASEURL = "https://maps.googleapis.com/maps/api/staticmap?"; 7 8public void MapBuild() { 9 // 中心座標 10 MAPBASEURL += "center=" + lat + "," + lng; 11 // ズームレベル 12 MAPBASEURL += "&zoom=" + zoom; 13 // 地図画像のサイズ 14 MAPBASEURL += "&size=1100x900"; 15 if (MAPKEY != null && MAPKEY.Length != 0) 16 { 17 MAPBASEURL += "&key=" + MAPKEY; 18 } 19 MAPBASEURL = Uri.EscapeUriString(MAPBASEURL); 20 StartCoroutine(Download(this.MAPBASEURL)); 21 } 22 23 // GoogleMapsAPIから地図画像をダウンロードする 24 IEnumerator Download(string url) 25 { 26 //var www = new WWW(url); 27 //yield return www; // Wait for download to complete 28 //callback(www.texture); 29 30 UnityWebRequest webRequestGoogleMap = UnityWebRequestTexture.GetTexture(url); 31 yield return webRequestGoogleMap.SendWebRequest(); 32 33 Texture2D myTexture = ((DownloadHandlerTexture)webRequestGoogleMap.downloadHandler).texture; 34 addSplatPrototype(myTexture); 35 } 36 37 /// imageにテクスチャを貼り付ける 38 public void addSplatPrototype(Texture2D tex) 39 { 40 GetComponent<Image>().sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), Vector2.zero); 41 }
試したこと
apiを叩く際、wwwのバージョンが古いためできないのだと思い、unitywebrequestに変更してみましたが関係ありませんでした。
textureを生成するところでつまづいてるのはなんとなくわかるのですが、具体的にどこかわからないです。
<変更>
全く同じような質問がありましたので、そちらを一度試してみます⬇︎
https://teratail.com/questions/192226
補足情報(FW/ツールのバージョンなど)
趣味でUnityをやり始めた初心者です。お手柔らかにお願いします。
解決するのに、参考になるサイトなどありましたら教えていただけると幸いです。
また、teratail初心者のため、書き方をこういう風に変更したほうがわかりやすいなどありましたら、アドバイスしていただけると助かります。
あなたの回答
tips
プレビュー