スクリプトでボタンのクリックを検知してモーダルウィンドウを開閉する方法をご紹介します。
手順
- モーダルウィンドウとボタンの作成
- これまでと同様に、モーダルウィンドウ (ModalWindow) と開くボタン (OpenModalButton) を作成します。
- ModalWindow の子オブジェクトとして、閉じるボタン (CloseModalButton) を作成します。
- スクリプトの作成とアタッチ
- OpenModalButton にスクリプトをアタッチします。スクリプト名は「ModalController」などに変更します。
- スクリプトをダブルクリックして開き、以下のコードを記述します。
C#
using UnityEngine;
public class ModalController : MonoBehaviour
{
public GameObject modalWindow;
public GameObject openButton;
public GameObject closeButton;
void Start()
{
// 各ボタンのコンポーネントを取得
UnityEngine.UI.Button openButtonComponent = openButton.GetComponent<UnityEngine.UI.Button>();
UnityEngine.UI.Button closeButtonComponent = closeButton.GetComponent<UnityEngine.UI.Button>();
// ボタンのクリックイベントを登録
openButtonComponent.onClick.AddListener(OpenModalWindow);
closeButtonComponent.onClick.AddListener(CloseModalWindow);
}
public void OpenModalWindow()
{
modalWindow.SetActive(true);
}
public void CloseModalWindow()
{
modalWindow.SetActive(false);
}
}
- スクリプトを保存し、Unity エディタに戻ります。
- ボタンとモーダルウィンドウの連携
- OpenModalButton の Inspector で、ModalController スクリプトの modalWindow に ModalWindow をドラッグ&ドロップします。
- 同じく、openButton に OpenModalButton を、closeButton に CloseModalButton をドラッグ&ドロップします。
変更点
- OnClick イベントの代わりに、
openButtonComponent.onClick.AddListener()
とcloseButtonComponent.onClick.AddListener()
を使って、ボタンのクリックイベントをスクリプトに関数として登録しています。
解説
Start()
関数内で、各ボタンのUnityEngine.UI.Button
コンポーネントを取得しています。AddListener()
を使って、ボタンがクリックされたときに呼び出す関数 (OpenModalWindow
、CloseModalWindow
) を登録しています。OpenModalWindow()
、CloseModalWindow()
関数は、それぞれモーダルウィンドウの表示/非表示を切り替えます。
この方法では、OnClick イベントを使わずに、スクリプトでボタンのクリックを検知してモーダルウィンドウを制御できます。
補足
- この方法でも、複数のボタンのクリックイベントを1つのスクリプトで管理できます。
AddListener()
の代わりに、ラムダ式を使って匿名関数を登録することも可能です。
C#
openButtonComponent.onClick.AddListener(() => {
modalWindow.SetActive(true);
});
この方法を使うことで、より柔軟なモーダルウィンドウの制御が可能になります。