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

 

 

    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脚本

 1
						using System.Collections.Generic;

 2
						using UnityEngine;

 3
						using UnityEngine.Events;

 4
						using UnityEngine.EventSystems;

 5
					

 6
						public
								class ScriptControl : MonoBehaviour { 

 7
					

 8
						// Use this for initialization
							

 9
						void Start ()

10     {

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

12
						if (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
							

31
						void Update () {

32
					

33     }

34
					

35
						public
								void OnScriptControll(BaseEventData arg0) 

36     {

37         Debug.Log("Test Click");

38     }

39
					

40 }

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

    

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

      

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

 1
						using UnityEngine;

 2
						using System.Collections;

 3
						using UnityEngine.UI;

 4
					

 5
						public
								class BtnControl : MonoBehaviour { 

 6
					

 7
						// Use this for initialization
							

 8
						void Start ()

 9     {

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

11
						if (button != null) 

12         {

13             button.onClick.RemoveAllListeners();

14             button.onClick.AddListener(TestClick);

15         }

16     }

17
					

18
						public
								void TestClick() 

19     {

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

21     }

22
					

23
						// Update is called once per frame
							

24
						void Update () {

25
					

26     }

27 }

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LetsonH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值