Unity 绑定(订阅)事件方式

绑定事件的本质是delegate委托,C#本身封装了一个Event类(配合EventArgs使用更方便),Unity又封装了UnityEvent和UnityAction(然后就可以在unity的inspector里通过拖动脚本或物体来绑定事件)。
所以addlistener方法除了可以传入void参数的方法,使用 addlistener(nameof(methodname)); 也可以传入委托,或使用表达式主体,即把委托声明放在了表达式里而不是由编译器来构造委托。
事先强调一下这一点,之后就不用再回答一个低级问题了:“如何在addlistener()时为订阅的事件(方法)传入事件参数?”

UGUI几种绑定事件的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class NewBehaviourScript : MonoBehaviour {

Button btn;
Toggle toggle;
InputField inputField;

public delegate void ClickEvent();
public ClickEvent clickEvent;
void Start()
{
//1 直接AddListener(string 方法名)
btn.onClick.AddListener(DoSomething);
//使用nameof()可以快速定位方法,便于调试,也可以用typeof(),但写起来较麻烦
btn.onclick.AddListener(nameof(DoSomething));
//2 Lamda表达式委托 有参
btn.onClick.AddListener(() =>
{
DoSomething();
Debug.Log("0");//可以传入更多方法作为参数
});
//3 隐式委托
btn.onClick.AddListener(delegate ()
{
DoSomething();
Debug.Log("0");
});
//4 向委托添加方法
clickEvent += DoSomething;
//5 EventTrigger
EventTrigger trigger = btn.gameObject.GetComponent<EventTrigger>();
EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = EventTriggerType.PointerClick;//鼠标点击事件
entry.callback = new EventTrigger.TriggerEvent();
entry.callback.AddListener(A);

//toggle
toggle.onValueChanged.AddListener(ToggleAction);
toggle.onValueChanged.AddListener(delegate { DoSomething()); });
toggle.onValueChanged.AddListener(delegate (bool value) { DoSomething()); });
toggle.onValueChanged.AddListener((value) =>
{
if (value)
{ }
else { }
});

//InputField
inputField.onValueChanged.AddListener(delegate
{
DoSomething();
});
inputField.onEndEdit.AddListener(DoSomethingStr);
}

void DoSomething() { Debug.Log("Do Something");}
void DoSomethingStr(string str) { Debug.Log(str); }
void A(BaseEventData data) { }

void ToggleAction(bool b) { }
}

Unity 绑定(订阅)事件方式
https://newztx.github.io/2024/03/15/Unity 绑定(订阅)事件方式/
作者
Cranky Dove
发布于
2024年3月15日
许可协议