
マイケル
みてくれよエレキベア!

エレキベア
なにクマか

マイケル
今度はもぐら叩きのARゲームを開発したんだ!

エレキベア
おーARクマか
最近の流行クマね〜〜〜
最近の流行クマね〜〜〜

マイケル
今回はこのARゲームの肝になる、
「AR空間のランダム位置にオブジェクトを生成する」
テクニックについて紹介するぜ!
「AR空間のランダム位置にオブジェクトを生成する」
テクニックについて紹介するぜ!

エレキベア
それは楽しみクマ
でもなんだかARって難しそうクマね〜〜〜〜
でもなんだかARって難しそうクマね〜〜〜〜

マイケル
今回はUnityが提供している、
ARFoundationというAR開発パッケージを使用したんだけど、
思ってたより簡単に使うことができたよ!
ARFoundationというAR開発パッケージを使用したんだけど、
思ってたより簡単に使うことができたよ!

マイケル
まずはARFoundationがどんなものかについて見ていこう!

エレキベア
クマ〜〜〜〜〜〜〜
ARFoundationとは

マイケル
先ほど話した通り、ARFoundationはUnityが提供している
AR開発のパッケージになります。
AR開発のパッケージになります。

エレキベア
Unity提供のパッケージがあるのクマね

マイケル
iOSではARKit、AndroidではARCoreという
ARのフレームワークが用意されているんだけど、
ARFoundationを使えば同じコードで両方の機能を動作させることができるんだ!
ARのフレームワークが用意されているんだけど、
ARFoundationを使えば同じコードで両方の機能を動作させることができるんだ!
↑イメージ図

エレキベア
マルチプラットフォームというわけクマか・・・。

マイケル
そのとおり!
さすがITクマだね
さすがITクマだね
スクリプトの実装

マイケル
インポート方法や基本的な使い方については今回は割愛します。
パッケージにはサンプルが用意されているので、いろいろ試してみてください!
パッケージにはサンプルが用意されているので、いろいろ試してみてください!

マイケル
ちなみに僕は下記サイト等を参考にさせてもらいました!
参考サイト:
【Unity】AR Foundation(ARKitとARCoreのマルチプラットフォームAR環境)の超入門
UnityでARKit3を動かすためにAR Foundationを使ってみる

エレキベア
どちらもわかりやすいサイトクマね

マイケル
それじゃさっそく、ランダム位置の生成処理を実装していこう!

エレキベア
やったるクマ〜〜〜〜〜〜!!

マイケル
ざっくりとした処理としては
1.ARで検出した面を取得・保持する
2.保持した面の大きさから、ランダム位置を決定する
といった流れで実装するよ!
1.ARで検出した面を取得・保持する
2.保持した面の大きさから、ランダム位置を決定する
といった流れで実装するよ!
ARPlaneの取得

マイケル
ARPlane(ARで検出した面)の取得処理は以下になります!

エレキベア
長くて分からないクマ〜〜

マイケル
少し細かく見ていこう!
・ARPlaneび取得処理

マイケル
下記部分でARPlaneの取得処理を行っています。
「aRPlaneManager.trackables」に検知された面が設定されているので、変数に格納します!
「aRPlaneManager.trackables」に検知された面が設定されているので、変数に格納します!
・ARPlaneの保持及び検知終了処理

マイケル
そして下記部分で、スタートボタンが押された際に
ARPlaneのリストとして変数に保持し、ARPlaneManagerを無効化することで
ボタン押下時のARPlaneオブジェクトを保持することができます。
ARPlaneのリストとして変数に保持し、ARPlaneManagerを無効化することで
ボタン押下時のARPlaneオブジェクトを保持することができます。

エレキベア
色を変えてる部分はなにクマ?

マイケル
よく気づいたね!
スタートボタン押下後はARPlaneを透明にするために
「color.a=0」を設定しているんだ。
スタートボタン押下後はARPlaneを透明にするために
「color.a=0」を設定しているんだ。

エレキベア
なるほどクマ
実体は残して色だけ透明にするクマね
実体は残して色だけ透明にするクマね
ランダム位置に生成

マイケル
ARPlaneのリストが保持できたら、
あとはランダムで位置を決めて生成するのみ!
スクリプトは以下になります。
あとはランダムで位置を決めて生成するのみ!
スクリプトは以下になります。

エレキベア
全然分からないクマ

マイケル
これもポイントだけ見ていこう!
・ランダムにARPlaneを選定

マイケル
まず下記の部分でリストからランダムでARPlaneを一つ取得するよ。

エレキベア
検知した面からランダムに選ぶクマね
・オブジェクト生成の位置を選定

マイケル
生成するARPlaneを決めたら、大きさを取得してランダムに位置を設定するんだ!

エレキベア
面の縦幅・横幅から位置を出すということクマね

マイケル
その通り!
こうすることで下の画像みたいにランダムにオブジェクトを出現させることができるようになるよ!
こうすることで下の画像みたいにランダムにオブジェクトを出現させることができるようになるよ!

エレキベア
うじゃうじゃ出てきたクマ・・・。
ARPlane再読込

マイケル
ついでだけど、AR検知結果をクリアして再読込させる方法についても紹介するよ!

マイケル
上記のようにARSessionを再度Instantiateさせることで
再度読込処理を行うことができるよ!
再度読込処理を行うことができるよ!

エレキベア
簡単クマ〜〜〜〜〜
おわりに

マイケル
というわけで今回は
「AR空間のランダム位置にオブジェクトを生成する」方法についての紹介でした!
どうだったかな?
「AR空間のランダム位置にオブジェクトを生成する」方法についての紹介でした!
どうだったかな?

エレキベア
本当に現実世界に現れたようで楽しかったクマ
他の機能も使ってみたいクマね〜〜〜〜
他の機能も使ってみたいクマね〜〜〜〜

マイケル
AR機能は他にもいろいろあるし
今後も進化し続けるだろうね。
また積極的に使っていこう!
今後も進化し続けるだろうね。
また積極的に使っていこう!

マイケル
それでは今日はこの辺で!
アデュー!!
アデュー!!

エレキベア
クマ〜〜〜〜〜〜〜〜
【Unity】AR空間のランダム位置にオブジェクトを生成する【ARFoundation】 〜完〜