UGUI_UGUI事件系统简述及使用方法总结

来源:互联网 发布:环球数码 知乎 编辑:程序博客网 时间:2024/05/21 22:50

 

 

    Unity3DuGUI系统的将UI可能触发的事件分为12个类型,即EventTriggerType枚举的12个值。如下图所示:

    先以PointerClick为例。这个是用于某点点击事件。其他事件都可以根据相同的办法调用。

    之所以使用PointerClick为例。是因为在最后笔者会提到一个特殊的实现方式。而相比于其他事件类型,有且仅有Click事件存在特殊实现。

    我们要实现事件主要有3种方式:

    方式一:继承基础接口实现

    步骤一:创建ClickObject脚本。继承MonoBehaviourIPointerClickHandler

    

    步骤二:实现public void OnPointerClick(PointerEventData eventData)方法:

    步骤三:创建一个名为Panel_IPointer的空对象。并且将ClickObject脚本附加到对象上。

    步骤四:启动,并点击Panel_IPointer对象。在Console输出如下:

  

    方式二:Unity3D编辑器操作设置实现

    

步骤一:创建一个C#脚本。在脚本中添加一个public方法。

步骤二:创建一个命名为EmptyUI对象,用于接收和响应点击事件。创建一个名为PanelUI对象,用于触发点击事件。

  

步骤三:Panel对象添加EventTrigger组件," Add New" -> 选择" PointerClick"。将Empty对象拖拽到触发者位置。然后点击"No Function"选择我们写在Test脚本中的OnTestClick事件。

  

    步骤四:设置好这些之后。我们的事件触发就已经完成了。运行Unity3D。点击窗口中Panel对象。Console输出内容如下:

    方式三:程序动态设置实现

    我们在日常的开发中。可能需要动态的需要变更绑定的事件。那么我们如何才能使用C#代码控制绑定触发事件呢?

    下面我们就介绍代码控制。ScriptControl.cs脚本

 1using System.Collections.Generic;

 2using UnityEngine;

 3using UnityEngine.Events;

 4using UnityEngine.EventSystems;

 5

 6publicclass ScriptControl : MonoBehaviour {

 7

 8// Use this for initialization

 9void Start ()

10     {

11var trigger = transform.gameObject.GetComponent<EventTrigger>();

12if (trigger == null)

13             trigger = transform.gameObject.AddComponent<EventTrigger>();

14

15// 实例化delegates

16         trigger.delegates = new List<EventTrigger.Entry>();

17

18// 定义需要绑定的事件类型。并设置回调函数

19         EventTrigger.Entry entry = new EventTrigger.Entry();

20// 设置 事件类型

21         entry.eventID = EventTriggerType.PointerClick;

22// 设置回调函数

23         entry.callback = new EventTrigger.TriggerEvent();

24         UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(OnScriptControll);

25         entry.callback.AddListener(callback);

26// 添加事件触发记录到GameObject的事件触发组件

27         trigger.delegates.Add(entry);

28     }

29

30// Update is called once per frame

31void Update () {

32

33     }

34

35publicvoid OnScriptControll(BaseEventData arg0)

36     {

37         Debug.Log("Test Click");

38     }

39

40 }

    点击事件的特殊实现方式:使用Button控件实现

    

    针对Click事件还存在一种特殊方式:uGUI系统中官方提供了一种Button控件。Button封装了官方提供的一套OnClick事件。操作完全类似于方式二。便不详述了。

     

    使用Button我们可以实现动态的变更鼠标绑定的点击事件。如下代码所示:

 1using UnityEngine;

 2using System.Collections;

 3using UnityEngine.UI;

 4

 5publicclass BtnControl : MonoBehaviour {

 6

 7// Use this for initialization

 8void Start ()

 9     {

10var button = transform.gameObject.GetComponent<Button>();

11if (button != null)

12         {

13             button.onClick.RemoveAllListeners();

14             button.onClick.AddListener(TestClick);

15         }

16     }

17

18publicvoid TestClick()

19     {

20         Debug.Log("Test Click. This is Type 4");

21     }

22

23// Update is called once per frame

24void Update () {

25

26     }

27 }