#16 残機がなくなったらゲームオーバーにする

2Dシューティング
このブログは、趣味でプログラミングを勉強中の筆者が、実験を繰り返しながら、WordPressの使い方の練習も兼ねて、備忘録のように記事を残していくものです。Unityのバージョンは6000.0.32f1です。

タイトル画面とゲームオーバー画面を作りましたが、ゲームオーバーのシーンに遷移する処理を作っていませんでした。未だに自機は無敵ですし。

今回のゴール

ゲームオーバーのシーンに遷移する

自機がダメージを受けるようにする

自機がダメージを受けた場合の処理を考えます。

  • 残機を減らして、残機がなくなったらゲームオーバー
  • エネルギーを減らして、エネルギーがなくなったらゲームオーバー

今回は伝統的なシューティングゲームの形である残機を減らす処理について考えます。

StageManager.cs

この関数は、プレイヤーの残機を一つ減らし、残機がなくなったらゲームオーバーに移行します。ただ、残機を一つ減らすだけでもいいですが、被弾したことが分かるように無敵時間を設定したいです。そこで、無敵処理中は別の処理をするために、状態を設定します。

まだ、GameData.gameStateは設定していないので、このままだとエラーになります。先にGameDataを変更した方がよいかもしれませんが、説明の都合上、先にplayerDamaged関数を作りました。

状態を定義する

GameData.cs

enumGameStateという型を作ります。GameStateは状態を表します。GameState.TitleGameState.Playingという状態に変化します。GameDataの中にgameStateという変数を作り、ここに状態を保持します。どのスクリプトからでもGameData.gameStateでアクセスできます。これで、状態を保持する仕組みが出来ました。次に、状態によって処理を分ける部分を作ります。

StageManager.cs

規模が大きいゲームになるとswitchを使うと大変になるんだそうですが、今回はこれでいきます。

ゲームがプレイ中の処理

StageManager.cs

これは、今までのUpdate関数の中身をそのまま移しました。

自機がダメージを受けたときの処理

StageManager.cs

PlayerDamageTimerの初期値は300です。つまり300フレームの間、ダメージ処理になります。ダメージ処理の間は、3フレームで自機を非表示にして、2フレームで自機を表示します。この結果、自機が点滅しているように見えます。ここで重要なのはPlayerではなく、playerInstanceを操作している点です。Playerにはプレイヤーのプレハブがセットされていますので、Playerを非表示にしてもインスタンスは非表示にならないのです。そこで、以下のようにしてPlayerのインスタンスをplayerInstanceにセットします。

GameObject型のplayerInstanceと、int型のPlayerDamageTimerの二つの変数を宣言し、Start関数の中ではゲームの初期化に関する処理を追加しました。自機を生成し、playerInstanceに保持しています。

ゲームオーバーになったときの処理

ゲームオーバーになったときは、GameOverのシーンを呼び出すだけです。

ゲームオーバーのシーン

ゲームオーバーのシーンは、何もしないとゲームオーバーの画面が永久に表示されるだけです。そこで、五秒経ったらタイトル画面に戻るようにします。以下のスクリプトを作成し、メインカメラに取り付けます。(空のゲームオブジェクトを作って取り付けても良い)

GameOver.cs

これで、ゲームオーバーのシーンが表示されてから五秒後にタイトル画面に戻ります。これで、一通り完成しました。あとは、これをどう作り込んでいくか・・・。

今回はここまでです。お疲れ様でした。

コメント

タイトルとURLをコピーしました