今回はゲームの仕様をがらっと変えてみたいと思います。
現在は、ハイスコアを狙ってひらすらフルーツをキャッチしていくゲームですが、ミッションを用意して達成したらクリア、失敗したらゲームオーバーにしたいと思います。
「制限時間以内に○○点以上を目指せ!」と言った感じですね。
クリアしたら、難易度が上がった次のステージに進んでいくというスタイルになります。
ゲームにクリア条件(ミッション)を設定しよう
タイトルシーンの作成
タイトル画面も作っていなかったのでまずは、クリア条件画面に繋ぐためにタイトル画面から作ります。
タイトル画面の作り方に関しては、過去の記事で紹介したので参考にしてください。
一応「ゲームスタート」と「ゲーム終了」ボタンを用意しました。
この辺のデザインはお好みでお任せします。
クリア条件のシーン作成
次に、クリア条件を表示するために新しいシーンを作ります。
シーン名を「rule1」にしてこのようなレイアウトにしてみました。
ヒエラルキーウィンドウはこんな状態です。
初めてプレイするはずなので、各フルーツが何点なのか分かるようにしています。
クリア条件としては、最初のステージなので比較的優しめにしました。考え方としては制限時間と得点という要素を活かすとクリア条件を設定しやすいと思います。
最初のタイトル画面で「ゲームスタート」ボタンを配置していますが、厳密にいうとこのシーンの「Start!!」ボタンが真のゲームスタートボタンになりますね。
各シーンに遷移させるスクリプトを作成
タイトルシーンからルールシーン、ルールシーンからゲームシーンに遷移させましょう。
タイトルシーンに戻って「Firststart」と「End」スクリプトを作成します。
・Firststart.cs
・End.cs
SceneManager.LoadSceneを使ってルールシーンに飛ばしましょう。
保存したら各ボタンにアタッチしてOn Click()の設定を行います。
・「Start」ボタン
・「Finish」ボタン
上の流れと同じように「rule1」シーンからゲームシーンに遷移させるスクリプトを作ってボタンにアタッチしてください。
このままゲームを実行するとエラーになるので、各シーンを「Build Settings」から登録します。
ゲームを実行してシーンが正しく遷移されるか確認しましょう。
クリア条件に対応するボタンとテキストをパネル上に作成
ゲームシーンに戻って、クリア出来たらステージ2へ、失敗したらリトライを促すテキストとボタンをそれぞれ用意します。
スコアパネル内に「NextButton」「RetryButton」「ClearText」「FailureText」を作成。
ゲーム実行時は表示しておく必要はないので、非アクティブ状態にします。
各テキストは「クリア!」や「失敗!」等のテキストを入力しておきましょう。
ボタンテキストには「次のステージへ」と「もう1度挑戦する」みたいな感じで。
クリア条件をスクリプトに追加する
それでは、先ほど設定したクリア条件をスクリプトに追加していきます。
前回実装したハイスコアの処理はコメントアウトしています。ミッション成功か失敗というゲームですので、ハイスコアは不要かな。ただせっかく作ったのでコメントアウトって感じです。
変更したのはコルーチンの中ぐらいですね。
300点以上獲得出来たらクリアに対応したボタンとテキストをアクティブに。そうじゃなければ失敗に対応したボタンとテキストをアクティブにします。
あと、パーティクルシステムもクリアしたときのみ再生するようにしています。失敗してるのに華やかな演出はおかしいですからね。
スクリプトを保存したら「GameObject」を選択して、各UIをアタッチします。
後はボタンを押した際にシーン遷移させるスクリプトを作成すれば良いですね。
「NextButton」で次のステージに進むようにし「RetryButton」で自シーンを読み込んで再プレイ出来るようにしてください。
ゲームを実行して動作確認
※30秒で300点以上って思った以上に難しかったので200点以上でクリア出来るように変更w
・クリアした場合
・クリアできなかった場合
こんな感じで、パネル上に結果に応じたボタンとテキストが表示されるはずです。
今回行った工程を繰り返すことで、ステージの数を増やしていけると思います。
もう1度プレイするとUnityちゃんが動かない時の対策
もう1度プレイしようとすると、ジョイスティックでUnityちゃんが動かない場合があります。
そんな時はこちらの記事を参考に、ジョイスティックのスクリプトを修正してください。