見出し画像

MapsSDK for Unityを使ってARコンテンツを作ってみた

1か月振りの投稿です。
相変わらず爬虫類飼育とエンジニアの二足の草鞋を履いています。
前回はVRの開発をしたので今回はARを触り始めました。
最初の方は環境構築のお話で他の方がまとめてるものがたくさんあるので参考リンク中心です。

1.はじめに

前回VRの開発をした時に環境構築でとても時間を持ってかれて勿体なかったので、ARもいつでも制作を始められるように環境構築だけしとこうと思い着手しました。
その過程でMapsSDK for UnityというGoogleが提供しているマップを3Dモデル込みで立体的に表示ができるSDKも使えるようになったので勉強としてARと絡めてみました。
【環境】
・Unity2019.4.3f
・ARFoundation
・MapsSDK for Unity
・Pixel4

2.目標

目標を決めたほうが制作が進むので下記のリンクの指定した緯度経度に3Dオブジェクトを表示するというのを目標に勉強を始めました。
この記事は端末のGPSを使って目的地の緯度経度との差分でオブジェクトの表示をしています。

3.AR実装

前回のVR開発の経験が生きているのか今回はすんなりいってくれました。
ARで参考にした記事はこちら ↓

平面検出、点群検出、平面にオブジェクトを置くなどのARFoundation
で出来る基礎部分がわかりやすくまとめられています。

4.MapsSDK for Unityを使ってみた

GoogleCloudPlatformでは様々なAPIが提供されていますがその中の1つにMapsSDK for Unityがあります。
PokemonGOに使われてるやつです。
大学在学中死に物狂いで色違いを探してました。
今までは一般ユーザーは使うことはできませんでしたが2020年6月から使用可能になったらしいです!

使い方はユーザー登録をしてAPIキーを取得すれば使うことができます。
クレジットの登録が必要ですが1人で使う分にはまずお金はかからないと思います。
半月くらい使ってましたが20円しかかかってませんでした。
しかもその20円も実質無料でこちらがお金を取られることはありません。
約2万円くらいまでは毎月無料で使えるみたいです。
詳しい使い方や価格はこちらでまとめられています ↓

ひとまず自分の現在位置を取得して周辺の地図を表示します。
Unityで端末の緯度経度を取得するにはC#スクリプトで”Input.location”を使って取得します。

このMapsSDKにはSampleもたくさん揃っていて、その中のMinimapというSceneはジョイスティックを使って、カメラを動かして向いてる方向の地図を更新していくのですが、それを改良してARラジコンみたいなものも作ってみました…!
予想してましたが3Dの地図はこの速度で更新させると重かったので2Dにしました。

5.指定した緯度経度にオブジェクトを配置する

やっとここまで来ました。
目標に決めた記事にも書かれていますが、指定した緯度経度にオブジェクトを配置するにはAR上で方角を指定する必要があります。
記事内では”Start Alignment”という項目がInspectorにあるのですが現在はそれが無くなっている?みたいです。
僕の方でも表示がありませんでした。

ということで実装です。
問題点はARは起動した時の正面が+Z方向になってしまうことなので、まず"Input.compass"を使って端末の方角の数値を取得します。
起動した時の方角の初期値で方角を合わせたいオブジェクトのRotationのYを引いてあげるとどの方角を向いて起動しても+Z方向が北を向くようになります。
表示される建物等のオブジェクトを現実世界の方角に合わせてぐるっと回転させてあげる感じですね。
あとは指定した緯度経度にスポーンするように自分の位置と目的地の差分を計算するスクリプトを書いてオブジェクトにアタッチしてAndroidにビルドします。
目的地に行くとちゃんと現われてくれました…!

多少ズレるのはGPSの仕組み的に仕方ないっぽいです。
なんだかんだ初めてGPSの仕組みを知りました。

6.まとめ

これで街中で誰にもバレず自由に自分がモデリングしたオブジェクトを配置することができるようになりました。
グラフィティじゃないですけど知らない間に街に作品が置かれてるってなんかカッコいいですね。
しかもアプリを持っている人だけが見れるという…ロマンです。
モデリングも上手くなっていきたいので勉強しながらたまに配置して写真でも撮ろうかなと思います…!
以上読んでいただきありがとうございました。✋

この記事が気に入ったらサポートをしてみませんか?