i-school - 3Dスライダーゲーム 発展10
 ステージの生成後に、ARCamera がプレイヤーを追従する機能を実装します。

 すでに必要な処理は CameraController スクリプト側に用意してありますので、
ARGameManager スクリプト内で、ARCamera に追従させる設定を実装します。

 合わせて、障害物に接触した際の霜のエフェクトも発生するように修正を行います。


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

発展10 ーARCamera のプレイヤー追従機能と霜のエフェクト機能の実装ー

14.ARCamera にプレイヤー追従機能を実装する
15.ARCamera にも霜のエフェクトが発生する機能を実装する



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

 ・処理の内容を自分で考える



14.ARCamera のプレイヤー追従機能を実装する

1.設計


 平面感知に合わせて Stage ゲームオブジェクトを生成するため、Stage ゲームオブジェクトは最初からヒエラルキーには存在していない状態になっています。
そのため、ペンギンのゲームオブジェクトも、ヒエラルキーには最初から存在していません

 よって、ペンギンの情報を他のクラスで活用するためには、Stage ゲームオブジェクトを生成した後に、その情報を変数内に取得する必要があります
今回の場合であれば、CameraController クラス内にある playerObj 変数が Null の状態になってしまっているため、
この部分に Stage ゲームオブジェクトを生成してペンギンも一緒にゲームシーンに生成されたあとで、CameraController クラスの変数にペンギンの情報を設定し、
変数の値を代入してあげる必要があります。

 現在カメラがペンギンを追従しないようになっているのは、この CameraController クラスの playerobj 変数に値がないためです。

 変数の値を取得の方法は様々ですので、いままで学習したことを活かしてどのようにすれば変数に取得できるかを考えてみてください。


2.Stage スクリプトを作成する


 Stage ゲームオブジェクトにアタッチして、制御をおこなうためのスクリプトを作成します。
このスクリプトは、ヒエラルキーにある Stage ゲームオブジェクトと、プレファブになっている Stage ゲームオブジェクトの両方にアタッチします。
その際、アサイン情報が異なりますので、プレファブのオーバーライド機能は利用しないようにしてください


Stage.cs

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



3.Stage ゲームオブジェクトに Stage スクリプトをアタッチして設定を行う


 ヒエラルキーにある Stage ゲームオブジェクトと、プレファブになっている Stage ゲームオブジェクトのそれぞれに Stage スクリプトをアタッチし、両方に設定を行います。
それぞれ、自分の子オブジェクトである penguin ゲームオブジェクトをドラッグアンドドロップしてアサインしてください。
アサインしたアイコンの色に注目しておいてください


ヒエラルキーにある Stage ゲームオブジェクトのインスペクター画像



プレファブになっている Stage ゲームオブジェクトのインスペクター画像(プレファブ編集モード時)




4.ARGameManager スクリプトを修正する


 ステージの生成後に CameraController スクリプトの PlayerObj 変数にプレイヤーの情報を登録する処理を実装します。
すでに必要なメソッドは用意してありますので、ステージ生成後に呼び出し命令を実行します。

 まずは自分でどのような命令を書けばいいのかを挑戦してみてください。
TODO も用意してありますので、そちらも活用してください。


ARGameManager.cs

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



5.AR Session Origin ゲームオブジェクトの設定を変更する


 ヒエラルキーにある AR Session Origin ゲームオブジェクトを選択して、インスペクターより CameraController スクリプトの設定を変更します。

 PlayerObj 変数に Pengiun ゲームオブジェクトの情報がアサインされていますので、この情報を削除して None の状態にしてください
これは、AR 内でステージを生成後、ステージにあるペンギンのゲームオブジェクトをスクリプトを利用して動的に取得するように変更したためです。

 そのため、現在は None ですが、ステージが生成されたタイミングで PlayerObj 変数にペンギンのゲームオブジェクトの情報が代入されます。

 今回のスクリプトの修正箇所の手順になりますので、ARGameManager と CameraController の両方のスクリプトの処理を見直して処理の流れを把握してみてください。


AR Session Origin ゲームオブジェクト インスペクター画像



 以上で設定は完了です。


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


 平面をタップしてステージを生成します。エディターのようにAR Camera がプレイヤーを追従すれば制御成功です。

 問題がなければ、続いて、AR Camera にも障害物に接触した際に霜のエフェクトを発生させるように機能を追加します。


15.ARCamera にも霜のエフェクトが発生する機能を実装する

1.設計


 MainCamera と同じように、AR Camera にも霜のエフェクトが発生するようにします。
どうすればうまく制御できるかを考えてみてください。


2.霜のエフェクトを発生させるため、AR Camera ゲームオブジェクトの設定を行う


 AR Camera ゲームオブジェクトのインスペクターから設定を行います。

 最初に TagMainCamera に変更します。

 続いて、MainCamera ゲームオブジェクトにアタッチされているのと同じように、
Frost スクリプトと FrostEffectController スクリプトを順番にアタッチします。

 Frost スクリプトの設定値は、MainCamera ゲームオブジェクトの Frost スクリプトの値と同じにしておきます。


インスペクター画像


 以上で設定は完了です。


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

 
 ステージを生成して、障害物に接触してみてください。
AR Camera にも霜のエフェクトが発生すれば制御成功です。

 ポイントは、何故、いままでと同じ処理が、AR Camera にFrost スクリプトなどをアタッチして設定しただけで実装することができたか、です。
この理由をしっかりと理解するためにも、FrostEffectController スクリプトを見直しておいてください。

 Tag の設定もポイントです。



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

 => 次は 学習の振り返り です。

 ただし、カメラの追従位置がよい位置にならない場合には、下記の手順へ進んで、カメラの調整を行ってください。

 発展11 カメラの位置調整