【Unity】UIのボタンを押すと他のゲームオブジェクトにアタッチされているスクリプトのメソッドを呼び出す。引数として押したボタンの情報を渡したい
設定手順
以下の手順で設定します。
- ターゲットオブジェクトのスクリプト
- 呼び出されるメソッドを持つスクリプトをターゲットオブジェクトにアタッチします。
using UnityEngine;
using UnityEngine.UI;
public class TargetScript : MonoBehaviour
{
public void ReceiveButtonInfo(Button button)
{
// ボタンの情報を処理
Debug.Log("ボタンが押されました: " + button.name);
}
}
- UnityEventを設定するスクリプト
- UnityEventを直接使用し、インスペクターから設定できるようにします。
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
public class ButtonClickHandler : MonoBehaviour
{
public Button button;
public UnityEvent<Button> onClick;
void Start()
{
if (button != null && onClick != null)
{
button.onClick.AddListener(() => onClick.Invoke(button));
}
}
}
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
public class ButtonClickHandler : MonoBehaviour
{
public Button button;
public UnityEvent<Button> onClick;
void Start()
{
if (button != null && onClick != null)
{
button.onClick.AddListener(OnButtonClick);
}
}
void OnButtonClick()
{
onClick.Invoke(button);
}
}
- Unityエディタでの設定
ButtonClickHandlerスクリプトをUIボタンにアタッチします。- ターゲットオブジェクトに
TargetScriptスクリプトがアタッチされていることを確認します。 ButtonClickHandlerスクリプトのOnClickイベントにTargetScriptのReceiveButtonInfoメソッドを追加します。
手順
ButtonClickHandlerスクリプトのonClickイベントのリストに新しいイベントを追加ButtonClickHandlerコンポーネントのインスペクターでOnClickイベントのリストを展開し、「+」ボタンをクリックして新しいイベントを追加します。
- 新しいイベントのオブジェクトフィールドにターゲットオブジェクトをドラッグ
- イベントのオブジェクトフィールドにターゲットオブジェクト(
TargetScriptがアタッチされているオブジェクト)をドラッグします。
- イベントのオブジェクトフィールドにターゲットオブジェクト(
- ドロップダウンメニューから
TargetScriptのReceiveButtonInfoメソッドを選択- イベントのドロップダウンメニューから
TargetScriptのReceiveButtonInfoメソッドを選択します。
- イベントのドロップダウンメニューから
- ボタンの情報を引数として設定
- 引数フィールドにボタン自体を設定します。これはインスペクターで行います。
これで、ボタンが押されると、TargetScriptのReceiveButtonInfoメソッドが呼び出され、ボタンの情報が引数として渡されます。ButtonClickedEventクラスを省略して、直接UnityEvent<Button>を使用することで、コードが簡潔になります。
参考
インスペクターでイベントハンドラを登録せず、GameObject.Findでアサインする方法
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
public class ButtonClickHandler : MonoBehaviour
{
public Button button;
public string targetObjectName = "TargetObject"; // ターゲットオブジェクトの名前
public UnityEvent<Button> onClick;
void Start()
{
// ターゲットスクリプトを直接見つける
TargetScript targetScript = GameObject.Find(targetObjectName).GetComponent<TargetScript>();
// UnityEventにターゲットスクリプトのメソッドを追加
onClick.AddListener(targetScript.ReceiveButtonInfo);
// ボタンのクリックイベントにUnityEventを追加
button.onClick.AddListener(() => onClick.Invoke(button));
}
}
訪問数 46 回, 今日の訪問数 1回





ディスカッション
コメント一覧
まだ、コメントがありません