【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));
}
}
ディスカッション
コメント一覧
まだ、コメントがありません