一、如何使用Button调用事件
1.在Button附件里的OnClick()栏点击"+"号,然后将要调用的事件方法所在脚本拖进去,选择对应方法,其中:
(1)方法要public出去;
(2)方法似乎最多只能带一个参,暂时没找到解决方法;
(3)IEnumerator协程接口不可直接调用(但是可以把StartCoroutine放在调用的方法里)。


2. 脚本控制监听Click事件
//记得引用UI
using UnityEngine.UI;
public Button button;
//将目标Button拖到GameObject上
void Start()
{
{
//如果是预制体身上的Button,就用GameObject.Find吧
button.onClick.AddListener(delegate
{
Debug.Log("我被点了一下");
});
{
Debug.Log("我被点了一下");
});
}
注意:
1.这个 AddListener 每次调用都会添加一个监听,不能放在UpDate里;
2.如果脚本是 DontDestroyOnLoad 的,记得在 AddListener 之前加上 button.onClick.RemoveAllListeners();
3.如果不想清空按钮所有事件(虽然很少这么做),你可以用 button.onClick.RemoveListener(btnAction);来移除指定事件;其中 btnAction是 UnityAction 型的,下面是示例代码:
//记得引用Events
using UnityEngine.Events;
//委托UnityAction
UnityAction btnAction1, btnAction2;
void Awake()
{
{
//委托事件1
btnAction1 = delegate
{
ClickOne();
};
btnAction1 = delegate
{
ClickOne();
};
//委托事件2
btnAction2 = delegate
{
ClickTwo();
};
btnAction2 = delegate
{
ClickTwo();
};
//添加监听
AddBtnListener();
}
}
void AddBtnListener()
{
btn.onClick.AddListener(btnAction1);
btn.onClick.AddListener(btnAction2);
}
{
btn.onClick.AddListener(btnAction1);
btn.onClick.AddListener(btnAction2);
}
void ClickOne()
{
Debug.Log("1");
}
void ClickTwo()
{
Debug.Log("2");
{
Debug.Log("1");
}
void ClickTwo()
{
Debug.Log("2");
//按下Button后去除第一个监听,之后就只会打印"2"
btn.onClick.RemoveListener(btnAction1);
}
btn.onClick.RemoveListener(btnAction1);
}
3.使用EventTrigger中的AddNewEventType添加事件,监听分解动作,其中
除了1中需要注意的事项,还需注意:
(1)各种Event触发的机理与时机:
①PointerEnter:指针(鼠标、手指等)进入目标(Button、Panel等)范围的瞬间;
②PointerExit:指针离开目标范围的瞬间;
③PointerDown:指针在目标范围内时:按下的瞬间;
④PointerUp:指针在目标范围内时:指针抬起的瞬间:即使指针抬起的瞬间不在目标范围内,也会触发;
⑤PointerClick:指针对目标完成一次点击的瞬间:如果指针抬起的瞬间不在目标范围内,便不会触发;PointerUp之后执行;
⑥Drag:指针按住并移动时:如果按下不移动则不触发;即使拖动时指针不在目标范围内也会触发;
⑦Drop:(理解为有其他东西被扔到监听对象身上时触发)在指针抬起的瞬间:如果被拖拽目标A此时在另一目标B的范围内,并且目标B有对Drop的监听(目标A不需要,但需要能够Drag),则触发;否则不会触发;在PointerUp之后执行;
⑧Scroll:指针在目标范围内时:无论指针是否按下,滚动滚轮时触发;
⑨UpdateSelected:指针完成一次PointerClick后,每一帧都会执行一次对应事件(下文的Select只在最开始执行一次);
⑩Select:指针在目标范围内完成第一次点击后,目标变为"Select"状态;
⑪Deselect:指针在目标范围外完成第一次点击后,目标变为"Deselect"状态;
⑫Move:任意目标处于"Select"状态下时:通过『上』『下』『左』『右』键,或"W", "S", "A", "D" 等键改变了Axis轴的Value时触发(可用Input.GetAxis("AxisName")检测);
⑬InitializePotentialDrag:指针在目标范围内按下时:初始化潜在的可拖动目标,在PointerDown后,BeginDrag前触发;
⑭BeginDrag:指针在目标范围内按下时:一旦移动便触发;即使拖动时指针不在目标范围内也会触发;
⑮EndDrag:指针在移动时抬起的瞬间:即使指针不在目标范围内也会触发;如果触发了Drop则在其之后触发;
⑯Submit:目标处于"Select"状态下时:点击"Submit"键(默认为"Enter"键)时触发;
⑰Cancel:目标处于"Select"状态下时:点击"Cancel"键(默认为"ESC"键)时触发;