Menu
CoddyTech

パネルの表示と非表示

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) で切り替えられます。

challenge icon

チャレンジ

簡単

草原のゲームにメニューを追加しましょう。Menu.csにStart()を書きます。

  1. SetActive(false)でmenuPanelとhelpPanelを非表示にします。
  2. menuButtonでメニューを表示し、mover.enabled = falseを設定します。resumeButtonでメニューを非表示にし、mover.enabled = trueを設定します。
  3. 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プレイグラウンド