スクリプトでボタンのクリックを検知してモーダルウィンドウを開閉する方法をご紹介します。

手順

  1. モーダルウィンドウとボタンの作成
    • これまでと同様に、モーダルウィンドウ (ModalWindow) と開くボタン (OpenModalButton) を作成します。
    • ModalWindow の子オブジェクトとして、閉じるボタン (CloseModalButton) を作成します。
  2. スクリプトの作成とアタッチ
    • 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 エディタに戻ります。
  1. ボタンとモーダルウィンドウの連携
    • OpenModalButton の Inspector で、ModalController スクリプトの modalWindow に ModalWindow をドラッグ&ドロップします。
    • 同じく、openButton に OpenModalButton を、closeButton に CloseModalButton をドラッグ&ドロップします。

変更点

  • OnClick イベントの代わりに、openButtonComponent.onClick.AddListener()closeButtonComponent.onClick.AddListener() を使って、ボタンのクリックイベントをスクリプトに関数として登録しています。

解説

  • Start() 関数内で、各ボタンの UnityEngine.UI.Button コンポーネントを取得しています。
  • AddListener() を使って、ボタンがクリックされたときに呼び出す関数 (OpenModalWindowCloseModalWindow) を登録しています。
  • OpenModalWindow()CloseModalWindow() 関数は、それぞれモーダルウィンドウの表示/非表示を切り替えます。

この方法では、OnClick イベントを使わずに、スクリプトでボタンのクリックを検知してモーダルウィンドウを制御できます。

補足

  • この方法でも、複数のボタンのクリックイベントを1つのスクリプトで管理できます。
  • AddListener() の代わりに、ラムダ式を使って匿名関数を登録することも可能です。

C#

openButtonComponent.onClick.AddListener(() => {
    modalWindow.SetActive(true);
});

この方法を使うことで、より柔軟なモーダルウィンドウの制御が可能になります。

投稿者 james

記録の重要性と書く心地よさに目覚めてブログをはじめる。とりあえずブログは5年後の35歳を目標に頑張りたい。jamesの由来は機関車トーマスのジェームズが幼少期、なんとなく好きだったから。ブログのテーマは正直、定まっていないが、自分の身に起きる人生体験を多くコンテンツ化したい。無駄と思えることでもコンテンツ化できたなら、素晴らしいじゃない。とりあえず、まずは記事を300本書くことを目標に頑張りたい。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です