[Unity] GO Mapアセットを使ってみる


GO Mapアセットとは

  • Unity伊藤さん(現在サバティカル中!)のツイートで話題になったアセット
  • APIから地理情報を引っ張ってきてパースして3Dモデルを展開してオマケでカメラの操作周りのソースも付いて、まさに何とかGOlikeなゲームの実装をアシストしてくれるアセット
  • 実装の深い部分に触れない範囲でざっくり使い方を書いてみる

簡単な使い方

  • 3D Demo scene を開くことでこのアセットを使う上で必要な全てを見ることが出来るはず
  • ネットワーク繋いだ状態で実行することでマップの取得/生成が行われる
    • 描画される場所はUnityEditor上であればLocationManagerDemoLocationで定義された場所
  • このままビルドしてAndroid/iOS端末上で見れば、現在位置周辺のマップの取得/生成が行われる
    • 移動して位置情報の更新が行われると追加でマップの更新(および遠くのマップの破棄)が行われる

主に使用するScript

LocationManager

  • Demo上では LocationManager GameObjectにアタッチされている
  • Android/iOS等の位置情報が取得できる端末においては現在の座標を取得し、定期的に更新する
    • UseLocationServicefalse にすることで恣意的に現在の位置情報を利用させなくもできる
  • UnityEditor等の位置情報が取得できない端末においては DemoLocationで定義された場所の座標を使用する
    • 任意の座標を表示する場合には DemoLocationCustom にした上で demo_CenterWorldCoordinates に座標を設定する
  • onLocationChanged イベントが用意されているので、位置情報の更新時、更新後の座標を利用した任意のコールバックを起こすことが可能
    • サンプルシーン内の MoveAvatar の実装を参考にすると良さそう

Map

  • Demo上では Map GameObjectにアタッチされている
  • 位置情報の更新にフックして、SmartTileを構築/破棄する君
    • 現在の座標のzoomレベルに基き、近隣のSmartTileを生成する
    • タイルとして生成済みだが、近隣のSmartTileに含まれないものは破棄する
  • 都度更新してほしくない場合は DynamicLoad を false にすると良い
  • Layers にて建物や水面に適応するMaterial等を設定することが可能

(SmartTile)

  • Mapによって動的に生成される
  • APIを叩き、jsonをパースし、地理情報に紐付いてオブジェクトを生成する実装はここに含まれている

TwoXOrbitGesture

  • Demo上では MainCamaera GameObjectにアタッチされている
  • Camaraにアタッチすることで、入力によるカメラ操作を行ってくれる君
  • ドラッグによるカメラを旋回させることができる
  • ピンチイン/アウト (モバイル端末でない場合はマウススクロール) で俯瞰したような視線とプレイヤーの一人称のような視線を徐々に切り替えることが出来る
  • 町中に入り込むようなFPSのようなゲームを作る場合は逆にこれは使わないようにすると良さそう

API(データソース)

最後に

  • Unityで位置情報ゲーム作る場合には、この実装見るだけで勉強になること多いので$20の価値あると思う...!!