一、如何使用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("我被點了一下");
});
}
注意:
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();
};
//委託事件2
btnAction2 = delegate
{
ClickTwo();
};
//添加監聽
AddBtnListener();
}
void AddBtnListener()
{
btn.onClick.AddListener(btnAction1);
btn.onClick.AddListener(btnAction2);
}
void ClickOne()
{
Debug.Log("1");
}
void ClickTwo()
{
Debug.Log("2");
//按下Button後去除第一個監聽,之後就只會打印"2"
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"鍵)時觸發;