1. 通过直接绑定脚本来绑定事件
1 : 建一个ButtonTest脚本,挂在一个游戏对象上(里面的方法public或private都可以).
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ButtonTest : MonoBehaviour {
private GameObject Obj;
private void Start()
{
Obj = GameObject.Find("Button");
Obj.GetComponent<Button>().onClick.AddListener(Func1);
Obj.GetComponent<Button>().onClick.AddListener(Func2);
}
void Func1()
{
print("执行了Func1方法!");
}
public void Func2()
{
print("执行了Func2方法!");
}
}
2 : 运行,点击按钮执行两个方法.
Obj.GetComponent<Button>().onClick.AddListener(Func1);可以换成
Obj.GetComponent<Button>().onClick.AddListener
(
delegate () {Func1(); }
);
3. 通过 EventTrigger 实现按钮点击事件(一)
1 : 创建一个ButtonClickTest 脚本, 利用 UnityEngine.EventSystems.EventTrigger 添加监听事件.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
// 此请求为自动添加 EventTrigger 脚本
[RequireComponent(typeof(UnityEngine.EventSystems.EventTrigger))]
public class ButtonTest : MonoBehaviour
{
// Use this for initialization
void Start()
{
Button _button = this.GetComponent<Button>();
EventTrigger _trigger = _button.gameObject.GetComponent<EventTrigger>();
EventTrigger.Entry en1 = new EventTrigger.Entry();
EventTrigger.Entry en2 = new EventTrigger.Entry();
EventTrigger.Entry en3 = new EventTrigger.Entry();
EventTrigger.Entry en4 = new EventTrigger.Entry();
EventTrigger.Entry en5 = new EventTrigger.Entry();
// 鼠标点击事件
en1.eventID = EventTriggerType.PointerClick;
// 鼠标进入事件
en2.eventID = EventTriggerType.PointerEnter;
// 鼠标滑出事件
en3.eventID = EventTriggerType.PointerExit;
en4.eventID = EventTriggerType.PointerDown;
en5.eventID = EventTriggerType.PointerUp;
en1.callback = new EventTrigger.TriggerEvent();
en1.callback.AddListener(Func1);
_trigger.triggers.Add(en1);
en2.callback = new EventTrigger.TriggerEvent();
en2.callback.AddListener(Func2);
_trigger.triggers.Add(en2);
en3.callback = new EventTrigger.TriggerEvent();
en3.callback.AddListener(Func3);
_trigger.triggers.Add(en3);
en4.callback = new EventTrigger.TriggerEvent();
en4.callback.AddListener(Func4);
_trigger.triggers.Add(en4);
en5.callback = new EventTrigger.TriggerEvent();
en5.callback.AddListener(Func5);
_trigger.triggers.Add(en5);
}
private void Func1(BaseEventData pointData)
{
Debug.Log("鼠标点击了!");
}
private void Func2(BaseEventData pointData)
{
Debug.Log("鼠标进入了!");
}
private void Func3(BaseEventData pointData)
{
Debug.Log("鼠标滑出了!");
}
private void Func4(BaseEventData pointData)
{
Debug.Log("按下");
}
private void Func5(BaseEventData pointData)
{
Debug.Log("抬起");
}
}
2 :把脚本挂在Button对象上,然后Unity会给Button游戏对象再挂一个EventTrigger脚本.
3 :运行.
4. 通过 EventTrigger 实现按钮点击事件(二)
1 :写一个脚本挂在一个游戏对象,例如相机上(和按钮关联的事件方法要声明为public).
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class ButtonTest : MonoBehaviour
{
// Use this for initialization
void Start()
{
}
public void Func1()
{
Debug.Log("鼠标点击了!");
}
public void Func2()
{
Debug.Log("鼠标进入了!");
}
public void Func3()
{
Debug.Log("鼠标滑出了!");
}
public void Func4()
{
Debug.Log("鼠标按下了!");
}
public void Func5()
{
Debug.Log("鼠标抬起了!");
}
}
2 :给Button游戏对象添加EventTrigger组件.
3 :在组件里添加对应的事件,选择对应的方法.
4 :运行,鼠标在按钮上运动,点击