i-school - プレイヤーを一瞬だけ傾けることでボールの往復状態を解消する

設計


 ゲームをデバッグしたり、遊んでいると、ボールが縦方向に一直線にだけ動く状態になってしまい、何回弾いても同じ位置を往復するような現象が発生することがあります。
この手順ではこの状態を、プレイヤーを一瞬だけ傾けることでボールが縦方向に往復し続けてしまう現象を解消する処理を実装していきます。

 この状態を解消する方法は他にもありますので、この方法以外を実装して試してみるのをいいでしょう。

 
<実装動画>
https://gyazo.com/726031bfa2f8dfaf6ae8e80dfe302396


実装手順


 以下の手順で実装を行います。

1.Contorllerスクリプトを修正する
2.player ゲームオブジェクトの Contorller スクリプトの設定を行う
3.ゲームを実行して動作を確認する



 新しい技術としては、以下の学習を行います。

・制御文の読み解き方


1.Contorllerスクリプトを修正する


 Contorller スクリプトを修正します。既存の内容はそのままに、宣言フィールドに変数の追加、およびUpdateメソッドに下記の内容を追加してください。
また、スクリプトの最後に新しいメソッドを1つ作成します。

 Updateメソッドには新しく制御文を追加しています。この制御文がどのような役割を果たしているかを読み解いていくことが大切です。
また制御文用に作成している変数が、どのように動いていることによって、この制御文の制御が変わります。この部分をよく学習してください。


Controller.cs

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



2.player ゲームオブジェクトの Contorller スクリプトの設定を行う


 Contorller スクリプトの修正が終了したら、ヒエラルキーの player ゲームオブジェクトを選択して、インスペクターを確認します。
新しく追加した変数の情報が追加されていますので、値を設定します。

 tile 変数には傾ける角度を設定します。この値の中でランダムな値を取得しますので、15 - 30 前後で設定してください。

 duration 変数は傾いている時間です。長いとずっと傾いたままになりますので、一瞬になるように 0.1 - 0.25 前後で設定してください。

 isTilt 変数はゲーム内で傾いた状態になったときにチェックが入り(true)、傾いていない間はチェックがない状態(false)になります。
この部分はゲーム実行中に操作されますので、ここではチェックを外したままの初期状態のままにしておいてください。


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



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


 ゲームを実行して、ボールを弾いてから右クリックをしてください。player ゲームオブジェクトが一瞬傾けば成功です。
傾く向きはランダムですので、押すたびに角度が変わります。

 また、右クリックをした際に plyyer ゲームオブジェクトのインスペクターを確認して、 isTilt にチェックが入るかも確認するとともに
チェックが入っている間に右クリックをしてもそのクリックは無視されて、現在傾いたままになるかを確認をします。(連打防止です)


<実行動画>
https://gyazo.com/cea5c822edf08489657f849ae70d840b


<playerゲームオブジェクトを確認する isTiltの状態>
https://gyazo.com/4fd6dee8f2c792c146f15ceb244215ab


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


応用編


 現在はこの右クリックによって傾ける回数には制限はありませんが、回数制限を設けたり、一定時間が経過しないと回数が増えないようになっていたりと
自由に設計をアレンジすることが出来ます。自分でどういった実装をしてみたいかを考えて設計をしてみましょう。

 また画面の端に操作説明を表示し、操作方法を伝えるようにする、というのも1つのアレンジの方法です。





 自分で製作しているゲームですので、手を加える程、愛着がわいてきます。たくさん自分のアレンジを加えて、楽しみながら製作を行ってください。