今回は、ゲーム全体を管理する監督オブジェクトを作りたいと思います。
Twitterでも書きましたが、ADSLの故障で約1週間ほどPCからネットが出来ませんでした。本当は連続更新が続いていたので、短いスパンで投稿し続けたかったんですけど、ごめんなさい!
本題に戻り、ゲームが開始してからゲームオーバーになるまでの一連の流れを作りますね。
ゲーム全体をコントロールするスクリプトの作成
まずは、プレイヤーコントローラを修正します。敵に接触したらゲームオーバーにする処理を
付け加えるためですね。
IsDeadというフラグを用意しました。敵に接触したらtrueとなりゲームオーバーになります。
また、監督スクリプトからチェックすることになります。
ChangeIKメソッドは、isKinematicをオンオフするメソッドで、Unityちゃんがジャンプ出来るのか出来ないのかを管理します。このメソッドは正直絶対必要ではないんですが、こういった事も出来るよという意味で付けておきます。
ゲームスタート時やゲームオーバー時にジャンプ操作を不可にするといった際に便利です。
当たり判定はOnCollisionEnter2Dを使います。敵に「enemy」というタグを用意して敵に接触したかを判別するようにします。
ディレクタースクリプトを作成する
ゲームの状態を判別するために、3つのステートを用意します
Readyステート
その名の通り、ゲームスタート時のステートです。この時点で急に敵が出現するのを防ぎます。
enemy.SetActive(false)がその部分です。ちなみに、雲は初期状態からスクロールするようにしています。その方が自然な感じがしたので。
画面がタップされると、Playステートに遷移して敵が出現するようになります。
Playステート
Unityちゃんを操作出来る状態です。敵が出現するので、回避するようにします。
敵に接触したらIsDeadをtrueにして、GameOverメソッドに進みます。
GameOverステート
敵と雲のスクロールを停止して、ゲームオーバーとなります。
スクロールの停止は、Find関数を使ってBackScrollがアタッチされているオブジェクトを探してenabledフラグをfalseにすることで停止させることが出来ます。
今後ゲームオーバー用のテキストを配置するのでよりゲームオーバーっぽくなると思います。この状態で画面がタップされたら、Reloadメソッドにアクセスし自シーンを読み込こんで初期化します。
スクリプトが完成したら新規で空のオブジェクトを作成し、このスクリプトをアタッチします。
アウトレット接続で、UnityちゃんとEnemyオブジェクトを設定してください。
ゲームを実行するとゲームスタートからスクロール停止まで確認出来ます。
次回は、ゲームにテキストの配置を行います。