前回はブロック崩しのゲーム部分を作成したので、今回は「メニュー部分」と「終了部分」を作成し、メニュー画面からゲーム画面への移動を実装していきます。
はじめに
今回は第2回目です。第1回目のゲーム部分作成は下記から。
前回のおさらい、今回やること
前回、実装したのは下の図でいう「ゲーム」の部分。今回は「メニュー」と「終了」の部分と「メニュー」から「ゲーム」の矢印の部分を作成していきます。
メニューと終了の作成
まずは「メニュー」と「終了」の作成。複雑なゲームだと、シーンをそれぞれ作成すケースもあるかと思いますが、今回はパネルを使っていきます。
メニューパネル
まずはゲーム開始時のメニュー画面(メニューパネル)を作成。ヒエラルキーで「UI」→「パネル」を選択。
名前を「PanelMenu」にして配下に「ボタン」と「テキスト」を追加。
テキスト部分は下記のように幅、高さ、テキスト、フォントサイズなどを変更。
ボタンも同様に、サイズなどを適当に変更しておきます。この辺は好きな大きさで問題なし。下記のような感じにします。
終了パネル
次はゲーム終了時に表示するパネルを作成。同じように「UI」→「パネル」を追加。名前を「PanelFinish」にして、配下にテキストを追加。
下記のような感じにします。テキスト部分は「ゲームオーバー」や「ゲームクリア」など状況に応じて変化するため、<>表記しておきます。
メニューからゲームへの移動
「メニューパネル」と「終了パネル」を作成したので、次は「メニュー」から「ゲーム部分」への移動を作成していきます。
状態管理
まずは状態管理するのを追加します。空のオブジェクトを作成して、名前を「GameManager」にします。
同じ名前でスクリプトを作成して、オブジェクトにくっつけておきます。このGameManagerスクリプト内で状態を管理していきます。
プレハブ化・制御
ゲーム開始時の「メニューパネル」にボールとバーは不要なのでプレハブ化して、ヒエラルキーから削除しておきます。
GameManagerのスクリプトを下記のように変更。簡単に説明すると、ゲーム開始でステータスを「メニュー」に。メニュー状態では「メニューパネル」を有効に。StartClickでステータスを「ゲーム」に。ゲーム状態では「メニューパネル」を無効にして、ボールとプレイヤー(バー)を生成。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameManager : MonoBehaviour { public GameObject ballPrefab; public GameObject playerPrefab; public GameObject panelMenu; public GameObject panelFinish; public enum Status { MENU, GAME, FINISH } void Start() { ChangeStatus(Status.MENU); } public void StartClick() { ChangeStatus(Status.GAME); } void ChangeStatus(Status nextstatus) { switch (nextstatus) { case Status.MENU: panelMenu.SetActive(true); break; case Status.GAME: panelMenu.SetActive(false); Instantiate(playerPrefab); Instantiate(ballPrefab); break; case Status.FINISH: break; } } }
GameManagerの各public変数にプレハブとパネルをセット
メニューのボタンをクリックした時にゲームマネージャーのクリック関数が実行されるようにします。
これでとりあえず、ゲーム開始で「メニュー」が出てきてスタートボタンを押したら「ゲーム」への移動するのが実装できました。