UnityでGoogleMapを表示する方法
かずまです。
今回はUnity上でGoogleMapを表示する方法を書いておきたいと思います。
流れ
- GoogleMapの緯度経度を地名から取ってくる
- GoogleAPIに緯度経度を投げて帰って来た画像を表示する
この2つになります。
緯度経度を取ってくる方法
色々あるとは思いますが、これいいな、と思ったので僕はコレにしました。
このサイトを使います。
パラメーターに地名を渡すだけでXML形式で緯度経度が返って来ます。
こんな感じです。
Unityではサーバーから何かダウンロードしてきたり、GET、POSTリクエストをする場合にはIEnumerator(非同期処理)を使うのでそれで書いていきます。
クラスを作ってAPIで呼び出せるようにする
今回はGmapというClassを作り、その中に記載していきます。
呼び出す側のコードを減らすためです。
呼び出し方の成功例
// GmapTest.cs private IEnumerator Start () { Gmap gmap = new Gmap ("東京"); Coroutine getGeo = StartCoroutine( gmap.GetGmap ()); yield return e; print ("東京(" + gmap.Latitude + " ," + gmap.Longitude + ")"); Coroutine getImage = StartCoroutine(gmap.GetImage ()); yield return getImage; }
Coroutineで受け止めているのはStartCoroutineの処理が終わったときに次の処理に移ると言うものです。
getImageまで終わればgmap.textureでGmapのImageが取れているはずなのでPlaneなどのTextureに入れて上げればOKです。
今回Includeするのは
// Gmap.cs using UnityEngine; using System.Collections; using System.Xml; # 返って来たXmlを解析するため using System; # double型にConvertするため
Gmap.csを書く
C#のGet, Setを使う
プロパティーをそのまま触らずにゲッター、セッターを使って書いています。
参考URL プロパティ - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
XmlDocumentを使う
// L43あたり xmlDoc.LoadXml (www.text);
これでWWWで返ってきた文字列をXMLで読み取ります。
その後
XmlNodeList nodes = xmlDoc.GetElementsByTagName ("result");
ここでresultというタグを取ってきます。
Nodesの中にはcoordinateというタグがあり、その下にlatitude, longitudeがあります。
そこを取ってくればいいわけですね。
WWWクラス
GetImageするところの実装ですが、Unity C#ではWWWを使ってダウンロードします。
GetImageをするときに
WWW www = new WWW (url); while (!www.isDone) { print (www.progress * 100 + "%"); } yield return www;
このようにするとダウンロードされているものが今何%かを知ることができます。
参考URL Unity - スクリプトリファレンス: WWW
最後に
今のところコレだとタダ画像を取ってきてるだけなので残念ながらGoogleMapのようにスクロール、ピン留めなどはできません。
ちょっと残念。