当前位置 博文首页 > unity工具人的博客:unity Toggle组件添加触发事件回调
方式一:
public class Demo : MonoBehaviour {
private Toggle toggle;
// Use this for initialization
void Start () {
toggle.onValueChanged.AddListener((bool isOn)=> { OnToggleClick(toggle,isOn); });
}
private void OnToggleClick(Toggle toggle,bool isOn)
{
//TODO
}
}
我们想要在代码里给按钮绑定点击事件并将按钮自身传进去,代码如下:
buttons = GetComponentsInChildren<Button>();
foreach (var bt in buttons)
{
Button temp = bt;//这里一定要重新声明一个引用 不然就会把数组最后一个传进去了
bt.onClick.AddListener(delegate () { GroupContrl(temp); });
}
方式二:
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
public class Cube : MonoBehaviour
{
//获取自己的 EventTrigger 组件
private EventTrigger _eventTrigger;
public EventTrigger eventTrigger
{
get
{
if (_eventTrigger == null)
{
_eventTrigger = this.GetComponent<EventTrigger>();
}
return _eventTrigger;
}
}
void Start()
{
AddEventTrigger(EventTriggerType.PointerEnter, Do);
}
/// <summary>
/// 给自己添加监听事件
/// </summary>
/// <param name="eventType">监听事件类型</param>
/// <param name="unityAction">监听事件触发的函数</param>
private void AddEventTrigger(EventTriggerType eventType, UnityAction<BaseEventData> unityAction)
{
//判断是否有 EventTrigger 组件,没有就添加
if (eventTrigger == null)
{
this.gameObject.AddComponent<EventTrigger>();
}
//定义回掉函数,委托
UnityAction<BaseEventData> action = new UnityAction<BaseEventData>(unityAction);
//判断 EventTrigger 组件上是否已经存在监听事件,如果有就查找是否存在eventType类型的监听事件
//如果找到了,就赋值,并返回
if (eventTrigger.triggers.Count != 0)
{
for (int i = 0; i < eventTrigger.triggers.Count; i++)
{
if (eventTrigger.triggers[i].eventID == eventType)
{
eventTrigger.triggers[i].callback.AddListener(unityAction);
return;
}
}
}
//定义所要绑定的事件类型
EventTrigger.Entry entry = new EventTrigger.Entry();
//设置事件类型
entry.eventID = eventType;
//设置回掉函数
entry.callback.AddListener(action);
//添加触发事件到EventTrigger组件上
eventTrigger.triggers.Add(entry);
}
/// <summary>
/// 触发事件需要执行的函数,由于UnityAction委托需要一个BaseEventData类型参数,所以需要设置一个BaseEventData类型的形参
/// </summary>
private void Do(BaseEventData baseEventData)
{
print(123);
}
}
cs