パネルの表示と非表示
CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 9/56。
パネルは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はCanvas(HUD)に配置し、シーンで各フィールドを割り当てます。両方のパネルはシーン内で有効になっているため、簡単に編集できます。次のようにStart()を記述してください。
- ゲーム開始時に、
menuPanelとhelpPanelを非表示にします。 menuButtonでメニューパネルを開き、そのresumeButtonで閉じます。- メニューパネル上の
helpButtonでメニューパネルをヘルプパネルに切り替え、ヘルプパネル上のbackButtonで元に戻します。 - メニューが開いている間、プレイヤーは歩けません。メニューを開くと
moverスクリプトを無効にし、Resumeで閉じると再び有効にします。
Playを押して歩き、メニューとヘルプを開いてから、Checkを押してください。
自分で試してみよう
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のボタンを接続する
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。