UGUI的事件系統預設使用時,是需要目前的類繼承事件接口,就可以在該類中加入它的事件方法,但是在多人開發時這種方式沒什麼好處。
用過NGUI的或許都知道UIEventListener這個類,因為使用超級友善,直接加入UI對象進行事件注冊即可。其實UGUI也可以模仿這種方式進行封裝。
代碼如下:
- usingUnityEngine;
- usingSystem.Collections;
- usingUnityEngine.EventSystems;
-
publicclassUUIEventListener
: MonoBehaviour,
- IPointerClickHandler,
- IPointerDownHandler,
- IPointerEnterHandler,
- IPointerExitHandler,
- IPointerUpHandler,
- ISelectHandler,
- IUpdateSelectedHandler,
- IDeselectHandler,
- IDragHandler,
- IEndDragHandler,
- IDropHandler,
- IScrollHandler,
- IMoveHandler
- {
-
publicdelegate
voidVoidDelegate(GameObject
go);
-
publicVoidDelegate
onClick;
- onDown;
- onEnter;
- onExit;
- onUp;
- onSelect;
- onUpdateSelect;
- onDeSelect;
- onDrag;
- onDragEnd;
- onDrop;
- onScroll;
- onMove;
-
publicobject
parameter;
-
publicvoidOnPointerClick(PointerEventDataeventData) {
if(onClick!=
null)onClick(gameObject);
}
-
publicvoidOnPointerDown(PointerEventDataeventData) {
if(onDown!=
null)onDown(gameObject);
-
publicvoidOnPointerEnter(PointerEventDataeventData) {
if(onEnter!=
null)onEnter(gameObject);
-
publicvoidOnPointerExit(PointerEventDataeventData) {
if(onExit!=
null)onExit(gameObject);
-
publicvoidOnPointerUp(PointerEventDataeventData) {
if(onUp!=
null)onUp(gameObject);
-
publicvoidOnSelect(BaseEventDataeventData) {
if(onSelect!=
null)onSelect(gameObject);
-
publicvoidOnUpdateSelected(BaseEventDataeventData) {
if(onUpdateSelect!=
null)onUpdateSelect(gameObject);
-
publicvoidOnDeselect(BaseEventDataeventData) {
if(onDeSelect!=
null)onDeSelect(gameObject);
-
publicvoidOnDrag(PointerEventDataeventData) {
if(onDrag!=
null)onDrag(gameObject);
-
publicvoidOnEndDrag(PointerEventDataeventData) {
if(onDragEnd!=
null)onDragEnd(gameObject);
-
publicvoidOnDrop(PointerEventDataeventData) {
if(onDrop!=
null)onDrop(gameObject);
-
publicvoidOnScroll(PointerEventDataeventData) {
if(onScroll!=
null)onScroll(gameObject);
-
publicvoidOnMove(AxisEventDataeventData) {
if(onMove!=
null)onMove(gameObject);
-
staticpublicUUIEventListener
Get(GameObject go)
-
UUIEventListenerlistener
= go.GetComponent();
-
if(listener==
null)listener
= go.AddComponent();
- returnlistener;
使用方式:
-
UUIEventListener.Get(btn.gameObject).onClick=
OnClickBtn;
-
UUIEventListener.Get(btn.gameObject).parameter=
index;
-
privatevoidOnClickBtn(GameObject
go)
-
intindex= (
int)UUIEventListener.Get(go).parameter;
-
Debug.Log("您單擊的索引為:"+
index);