i-school - 3Dダイビングゲーム 手順24
 ここからはゲームのルールを実装していきます。

 着水した際、その判定を利用してカメラを初期カメラに戻したり、キャラを移動させないようにするなどの、複数の制御を行います。


<完成動画 着水したら、カメラを初期のカメラに切り替える>
https://gyazo.com/4bd83309a03c7e826ddea76fbdd82643


<完成動画 着水したらキャラの移動をできなくして、姿勢のゲージを停止し、ボタンも押せなくする>
https://gyazo.com/29aa484c8ec929b919d71891b2402da7


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

手順24 ーゲームクリア処理の実装ー
41.スクリプトを使って、ゲームクリアの状態になったら、カメラを初期のカメラに戻す処理を追加する
42.スクリプトを使って、ゲームクリアの状態になったら、キャラの移動制御処理とゲージの制御処理を追加する



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

 ・自分でプログラムを考えてスクリプトに記述する



41.スクリプトを使って、ゲームクリアの状態になったら、カメラを初期のカメラに戻す処理を追加する

1.設計


 カメラを自由に切り替えられる制御を実装していますが、着水した際に一人称視点カメラや自撮りカメラのままになっていると水面を映しません。
そのため、せっかく、三人称カメラのカメラが水面を映していてもその状態になりません

 そこで、着水したと同時に、カメラを強制的に初期の三人称カメラに切り替える制御を実装してください。


<完成動画 着水したら、カメラを初期のカメラに切り替える>
https://gyazo.com/4bd83309a03c7e826ddea76fbdd82643


 CameraController スクリプトには、SetDefaultCamera メソッドが用意されていますので
着水した際に、こちらのメソッドを呼び出す命令を記述すれば、カメラを三人称カメラに切り替えることが出来ます。

 今回は、自作していただいた距離を測るスクリプト(ここでは GameManager)に、この処理を追加して命令を出してください。

 どのようなロジックにすればいいか考えて実装してみてください。


2.距離の変数を記述したスクリプトを修正する


 どのような修正を行えば、CameraController スクリプトに対して命令を出せるようになるのか
いままでの学習をふまえて処理を実装してみてください。


GameManager.cs(自分で作成しているスクリプトがある場合には、そのスクリプトを修正する)

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



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



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


 制御処理を追加したら、実際にゲームを実行して処理を確認してみてください。
このトライ&エラーがプログラムの基本です。根気よく、制御が成功するまでがんばってください。


<実装動画 一人称視点カメラ → 三人称カメラに切り替える>
https://gyazo.com/167ce9c91f0ab40f738f8b7cb131f630


<実装動画 自撮りカメラ → 三人称カメラに切り替える>
https://gyazo.com/4bd83309a03c7e826ddea76fbdd82643


 無事にカメラの切り替えの制御が成功したら、次はキャラの制御を行います。


42.スクリプトを使って、ゲームクリアの状態になったら、キャラの移動制御処理とゲージの制御処理を追加する

1.設計


 続いての制御はキャラの移動停止の処理と、姿勢変更ゲージの停止の処理を実装します。
またゲージが満タンの際は姿勢変更ボタンを押せないようにする制御処理の実装も必要です。

 すべて PlayerController スクリプトで制御を行っている処理ですが、1つずつ順番に、制御する方法を考えてください。

 まずは、ゲームクリアの状態をどのように判断するか、です。
先ほどの自作スクリプト(GameManager スクリプト)にある変数を利用してもよいですし、
PlayerController スクリプトにある変数を利用しても、どちらでも構いません。

 キャラの移動の停止については、キャラの移動を制御している部分を見つけて、
その部分にどのような制御を行えばキャラの移動を停止することができるかを考えます。

 キャラの移動は、キー入力による判定と、オブジェクトを移動させる処理に分かれていますので
どういった制御が一番効率がよいのかを考えてみましょう。

 ヒントは、キー入力の受付を停止することです。


 姿勢変更のゲージの停止ですが、こちらもどこでゲージを動かす処理を制御しているかを見つけます。
また姿勢変更ボタンの操作も受け付けないように制御を行わないとならないと思います。

 こちらのヒントはゲージを増減させないようにして、ボタンを非活性化することです。

 どの部分に処理を追加すればよいか、ロジックを考えて実装を行って、下記の実装動画のように制御をしてください。

 PlayerController スクリプトのみで完結する方法を考えるのであれば、新しい変数は必要ありません。
また制御処理も2つのメソッド内に数行ずつの処理で実装出来ます。いままでどのように制御を行ってきたのか
条件に利用できる変数はどれなのか、考えてみてください。


2.PlayerController スクリプトを修正する


 こちらにはキャラの移動の制御、ゲージの制御、ボタンの制御をすべて記述しています。
外部のスクリプトの情報は利用せずに、PlayerController スクリプト内の情報を制御に利用しています。

 自分なりの実装を行った上で確認をお願いします。


PlayerController.cs

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



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


 制御処理を実装したら、順番に制御が行われているかを確認してください。
着水した際にキャラの移動が出来なくなっている場合、必ずキャラが着水地点から水面にあがってくるため
カメラのちょうどよい位置に毎回かならず顔を出すようになります。


<失敗例 キャラの移動が制御出来ていない場合>
https://gyazo.com/855b2df5b9fb5502476781a7b85f03b0


<成功例 キャラの移動が制御出来ている場合>
https://gyazo.com/cc14ca25efcbb8699202375b4c0ed363



 姿勢変更のゲージとボタンについての制御も確認します。
着水したら、ゲージの上昇や下降が停止し、ゲージが満タンの場合にはボタンを押せない状態になります。


<実装動画 姿勢変更のゲージが停止する>
https://gyazo.com/29aa484c8ec929b919d71891b2402da7


<実装動画 姿勢変更のゲージが満タンでもボタンを押せない状態にする>
https://gyazo.com/4c49dd7654201d4d81048771902aea56


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

 => 次は 手順25 ークリア表示の実装ー です。