パネルの表示と非表示
CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 9/60。
パネルは UI Image で、画面全体に広げられることが多く、その子としてボタンやテキストを持ちます。パネルに対して SetActive(false) を実行すると、内部のすべてと一緒に非表示になり、非表示の間はそのボタンをクリックできません。表示中は、その画像が背後にあるものに向けられたクリックを受け取るため、全画面パネルの背後にあるボタンは押せません。このマップは隅にあるボタンから開き、マップ上のボタンから閉じます:
public GameObject mapPanel;
public Button mapButton;
public Button closeButton;
void Start()
{
mapPanel.SetActive(false);
mapButton.onClick.AddListener(() => mapPanel.SetActive(true));
closeButton.onClick.AddListener(() => mapPanel.SetActive(false));
}パネルは表示した状態のほうが編集しやすいため、シーンは表示状態で保存されることが多く、Start() で非表示にします。パネルを開くスクリプトは、そのパネルの外に置いてください。非アクティブな GameObject では Start() も Update() も実行されないため、非表示で保存されたパネル上のスクリプトでは、ボタンの設定が行われません。常にアクティブな Canvas またはゲームマネージャーオブジェクトに置くとよいでしょう。mapPanel.activeSelf はパネルがオンかどうかを示すため、mapPanel.SetActive(!mapPanel.activeSelf) で切り替えられます。
チャレンジ
簡単草原のゲームにメニューを追加しましょう。Menu.csにStart()を書きます。
SetActive(false)でmenuPanelとhelpPanelを非表示にします。menuButtonでメニューを表示し、mover.enabled = falseを設定します。resumeButtonでメニューを非表示にし、mover.enabled = trueを設定します。helpButtonでメニューを非表示にしてヘルプを表示します。backButtonではその逆を行います。
「プレイ」を押してメニューを開きます。「再開」を押すまでプレイヤーは歩けません。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
using UnityEngine.UI;
public class Menu : MonoBehaviour
{
public GameObject menuPanel;
public GameObject helpPanel;
public Button menuButton;
public Button resumeButton;
public Button helpButton;
public Button backButton;
public PlayerMover mover;
void Start()
{
// 両方のパネルを非表示にしてから、Menu、Resume、Help、Back のボタンを接続する
}
}
本格的なゲームを作るのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド