一、如何使用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"状态;
⑪
Des
elect:指针在
目标
范围外
完成第一次点击后,
目标
变为"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"键)时触发;