3テラバイト

プログラム関連備忘録サイト。主にゲーム。

Unity

Unity – UIのButtonにイベントを設定する方法まとめ

投稿日:

こんにちは、今日はUnityでUIのButtonクリック時に発生するイベントを設定する方法についてまとめていきます。

HierarchyウィンドウからCreate > UI > Buttonを選択や、メインメニューのGameObject > UI > Button等から追加できるものです。

確認環境

Unity 2018.4.15f1

ButtonコンポーネントのOn Click ()項目から追加

追加されたボタンオブジェクトをHierarchyウィンドウで選択するとInspectorウィンドウに表示されます。

メニューからボタンを作成すると、追加されたオブジェクトに最初からButtonコンポーネントが付与されています。
そのコンポーネントのプロパティにOn Click ()という項目があるので、そこからクリック時に呼び出す関数を設定可能です。

On Click ()の項目にあるプラスボタンを押すとイベントを追加できます。

None (Object)と表示されている欄にボタンクリック時に実行したい関数が定義されているクラスを持っているオブジェクトを設定します。
ここでは以下のような内容のスクリプトTestScript.csを作成し、作成したButtonに付与しました。

オブジェクトを設定するとNo Functionと表示されているプルダウンがアクティブになるので、その中から実行したい関数が定義されているクラス名から関数を設定します。

本記事の例ではTestScriptのTestButtonOnClick ()を選択します。

using UnityEngine;



public class TestScript : MonoBehaviour

{

    public void TestButtonOnClick()

    {

        Debug.Log("Test Button");

    }

}

この状態で実行し、ボタンを押した時にConsoleにTest Buttonと表示されれば正常に設定が行えています。

以下のように引数も設定可能です。

using UnityEngine;



public class TestScript : MonoBehaviour

{

    public void TestButtonOnClick(int num)

    {

        Debug.Log("Test Button num = " + num);

    }

}

スクリプトから追加する

スクリプトでボタンの参照を取得し、それに対してイベントの設定を行うこともできます。
以下のようなスクリプトを任意のアクティブなオブジェクトに追加し、InspectorからTest Buttonに作成したボタンを設定します。

この例ではボタンのクリックイベントにAddListener関数でTestButtonOnClick関数を追加しています。
ゲームを再生し、ボタンクリック時にConsoleにTest Buttonと出力されれば正常に設定できています。

using UnityEngine;

using UnityEngine.UI;



public class TestScript : MonoBehaviour

{

    [SerializeField]

    Button testButton;



    void Start()

    {

        testButton.onClick.AddListener(TestButtonOnClick);

    }



    public void TestButtonOnClick()

    {

        Debug.Log("Test Button");

    }

}

引数付きの関数の場合は以下のような記述になります。

using UnityEngine;

using UnityEngine.UI;



public class TestScript : MonoBehaviour

{

    [SerializeField]

    Button testButton;



    void Start()

    {

        testButton.onClick.AddListener(() => TestButtonOnClick(1));

    }



    public void TestButtonOnClick(int num)

    {

        Debug.Log("Test Button num = " + num);

    }

}


スクリプトから設定する場合は、関数を定義せずに直接以下のように設定することもできます。

using UnityEngine;

using UnityEngine.UI;



public class TestScript : MonoBehaviour

{

    [SerializeField]

    Button testButton;



    void Start()

    {

        testButton.onClick.AddListener(() => Debug.Log("Test Button"));

    }

}

注意点

複数のボタンに番号を振りつつイベントを設定していくような場合、以下のようなコードだと期待した動作となりません。

using UnityEngine;

using UnityEngine.UI;



public class TestScript : MonoBehaviour

{

    [SerializeField]

    Button[] testButton;



    void Start()

    {

        for(int i = 0; i < testButton.Length; i++)

        {

            testButton[i].onClick.AddListener(() => Debug.Log("Test Button " + i));

        }

    }

}


以下のように一時変数に格納し、その値を渡す必要があります。

using UnityEngine;

using UnityEngine.UI;



public class TestScript : MonoBehaviour

{

    [SerializeField]

    Button[] testButton;



    void Start()

    {

        for(int i = 0; i < testButton.Length; i++)

        {

            int tmp = i;

            testButton[i].onClick.AddListener(() => Debug.Log("Test Button " + tmp));

        }

    }

}

リンク

Button.onClick
https://docs.unity3d.com/ja/2018.4/ScriptReference/UI.Button-onClick.html

ラムダ式 (C# プログラミング ガイド)
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions

-Unity


comment

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

関連記事

no image

Unityで使用するコンパイラーを切り替える方法

こんにちは、今日はUnityで使用するC#コンパイラーを切り替える方法についてまとめていきます。 確認環境 Unity 2018.4.15f1 設定方法 Edit > Project Settings …

no image

Unity2020でMapboxを使用する

この記事ではエラー回避のため、SDKからAR関連パッケージを除外してインポートを行います。セットアップ完了まで動作確認済ですが、AR以外にも動作に影響している可能性があります。 確認環境 Unity …

no image

UnityのGUI.Labelのサイズを取得する

こんにちは、今日はUnityのGUI.Labelのサイズを取得する方法についてまとめていきます。 確認環境 Unity 2018.4.15f1 GUI.Labelのサイズを取得する string st …

no image

Unityで簡単なセーブ機能を実装できるPlayerPrefsの使い方

プラットフォームごとの保存先が公式ドキュメントに記載されています。Windowsはレジストリに保存を行うため、レジストリにデータを保存したくない場合は別の実装にする必要があります。 確認環境 Unit …

no image

Unity – モニターがサポートするフルスクリーン解像度一覧を取得する

こんにちは、今日はUnityでモニターがサポートするフルスクリーン解像度一覧を取得する方法についてまとめていきます。 確認環境 Unity 2018.4.15f1 モニターがサポートするフルスクリーン …