i-school - 3Dスライダーゲーム 発展7
 AR Camera による平面の感知機能と、感知した部分をタップすることで、そこにステージを表示して遊べるようにする機能を実装します。

 以下の内容で順番に実装を進めていきます。

発展7 ーAR Camera による平面の感知機能の実装ー
11.AR Camera による平面の感知機能を実装する



 新しい学習内容は、以下の通りです。

 ・AR Camera による平面感知



11.AR Camera による平面の感知機能を実装する

1.設計


 この手順ではヒエラルキーにあるステージを一旦非表示にしたあと、平面感知した部分をタップすることにより、再度ステージ表示させる機能を追加します。

 ただしこれはあくまでもヒエラルキーにある Stage ゲームオブジェクトを再表示するだけであるため、
AR カメラが感知した平面に対して新しい Stage ゲームオブジェクトを生成している訳でありません
そのため、感知しているどの平面をタップしても、常に同じ位置に Stage ゲームオブジェクトが再度表示されます。

 よってまずは平面感知の機能を確認する、という意味で、ヒエラルキーにある Stage ゲームオブジェクトの再表示が動作するかを確認します。
平面感知が機能していれば Stage ゲームオブジェクトが見えるようになります。

 そして次の手順ではこの部分を、平面をタップした地点にステージを生成する処理に変更します。
そうすることにより、この手順ではできなかった「平面感知した地点に対して」Stage ゲームオブジェクトが表示されるように修正を行っていきます。



 処理の動作確認の方法には Debug.Log メソッドを活用する方法もありますが、
動作を確認したい機能を、ゲーム内の処理に紐づけて利用することでも動作検証が行えます
1つずつ、処理を積み重ねてゲームを作っていきますが、全体としての目標も念頭に置いておくと、
現在の手順で出来ることと、次の手順で行うことへの理解度が深まり、作っていくイメージがわきやすくなります。


2.AR Session Origin ゲームオブジェクトを修正する


 平面感知に関係するコンポーネント(用意されているスクリプト)を新しく2つアタッチします。

 AR Session Origin ゲームオブジェクトのインスペクターの一番下にある Add Component ボタンを押して、
AR Plane Manager コンポーネントAR Raycast Manager コンポーネントの2つを追加してください。


インスペクター画像



 追加だけすれば、他の設定は不要です。

 以上で完了です。


3.平面感知をした際に生成するゲームオブジェクトを作成し、プレファブにする


 こちらは予め、Unity が準備している機能を活用します。

 ヒエラルキーの空いている場所で右クリックをしてメニューを開き、XR => AR Default Plane を選択します。
名前もそのままで構いません。


ヒエラルキー画像



インスペクター画像



 この AR Default Plane ゲームオブジェクトをそのままプレファブにします
プレファブにしたら、ヒエラルキーより削除します。


4.AR Session Origin ゲームオブジェクトの設定を行う


 先ほど作成した AR Default Plane ゲームオブジェクトを、AR Session Origin ゲームオブジェクト内に設定します。

 AR Session Origin ゲームオブジェクトのインスペクターを確認し、アタッチされている AR Plane Manager スクリプトの Plane Prefab 変数に、
プレファブになっている AR Default Plane ゲームオブジェクトをドラッグアンドドロップしてアサインしてください。

 この設定を行うことにより、AR Camera が平面を感知すると、その地点に AR Default Plane ゲームオブジェクトを生成してくれるようになります。
また、感知範囲に合わせて、サイズを自動的に変更してくれます。 


インスペクター画像



 以上で設定は完了です。


5.ARGameManager スクリプトを作成する


 平面感知の機能を実装するためのスクリプトを作成します。
なお、この書き方がすべてではありません。
内容的には同じ処理であっても書式は異なりますので、色々なサイトを確認してみてください。


ARGameManager.cs

<= クリックすると開きます。



6.AR Session Origin ゲームオブジェクトに ARGameManager をアタッチして設定を行う


 AR Session Origin ゲームオブジェクトに、ARGameManager スクリプトをドラッグアンドドロップしてアタッチします。

 インスペクターを確認し、変数の情報が2つ表示されていますので、そちらに必要な情報をアサインします。

 StageObj 変数には、ヒエラルキーにある Stage ゲームオブジェクトをドラッグアンドドロップしてアサインします。
これは、まだプレファブを生成するのではなく、ヒエラルキーにある Stage ゲームオブジェクトを制御するためです。
次の手順では変更しますので、覚えておいてください

 CameraController 変数には、AR Session Origin ゲームオブジェクトにアタッチされている CameraController スクリプトをドラッグアンドドロップしてアサインします。


インスペクター画像



 以上で完成です。


7.ゲームを実行して動作を確認する


 ビルドを行い、実機にてテストを行います。

 カメラを床やテーブルなどに向けて動かしてみてください。
平面感知に成功すると、その地点に AR Default Plane ゲームオブジェクトが生成されて、範囲が自動的に調整されます。

 平面感知している部分をタップすることで、ステージが表示されれば制御成功です。



 以上でこの手順は終了です。

 => 次は 発展8 −平面をタップした地点にステージを生成する機能の実装− です。