UI 组件本身实现了大量的接口,用这些接口来扩展本身的功能。
接口命名规则:IxxxHandler。
I:前缀,表示它是一个接口;
xxx:它本身的名字;IDragHandler[拖拽处理器接口]
Handler:后缀,表示它是一个特定功能的处理器。
使用步骤:
①在使用 UGUI 中的事件的时候,需要在脚本内引入专有命名空间using UnityEngine.EventSystems;
②在当前类继承的父类的后方,用逗号分隔,写需要使用到接口名;
③鼠标放到接口名上,Alt+Enter-->实现接口 / 显示实现接口;
④编写方法体;
拖拽事件接口:
IBeginDragHandler:开始拖拽事件处理器;开始拖拽的一瞬间触发。
IDragHandler:拖拽中事件处理器;拖拽过程中持续触发。
IEndDragHandler:结束拖拽事件处理器;拖拽结束的一瞬间触发。
拖拽事件改变UI图片的位置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class ItemDrag : MonoBehaviour,IDragHandler,IBeginDragHandler { private RectTransform m_RectTransform; Vector3 offset; void Start() { m_RectTransform = gameObject.GetComponent<RectTransform>(); } // PointerEventData指针事件数据. void IDragHandler.OnDrag(PointerEventData eventData) { Vector3 pos; //RectTransform 工具类. 屏幕坐标点转化为世界坐标点(游戏物体的 RectTransform,当前坐标位置点, 事件摄像机, 最终计算得到的世界坐标位置). RectTransformUtility.ScreenPointToWorldPointInRectangle(m_RectTransform, eventData.position, eventData.enterEventCamera, out pos); m_RectTransform.position = pos + offset; } void IBeginDragHandler.OnBeginDrag(PointerEventData eventData) { //开始拖拽时计算偏移量. offset = m_RectTransform.position - Input.mousePosition; } }
指针事件接口:
指针:就是 PC 端的鼠标指针,以及移动端的触屏。
当我们在 PC 端移动鼠标与 UI 物体接触的时候,就会触发相应的指针事件。
IPointerEnterHandler:指针进入事件处理器;一瞬间触发。
IPointerExitHandler:指针离开事件处理器;一瞬间触发。
IPointerDownHandler:指针按下事件处理器;一瞬间触发。
IPointerUpHandler:指针抬起事件处理器;一瞬间触发。
IPointerClickHandler:指针单击事件处理器;指针按下+抬起=单击。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class PointerDemo : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler { //指针单击事件.(显示实现接口是这种格式的) void IPointerClickHandler.OnPointerClick(PointerEventData eventData) { Debug.Log("OnPointerClick指针单击事件"); } //指针按下事件. void IPointerDownHandler.OnPointerDown(PointerEventData eventData) { Debug.Log("OnPointerDown指针按下事件"); } //指针进入事件. void IPointerEnterHandler.OnPointerEnter(PointerEventData eventData) { Debug.Log("OnPointerEnter指针进入事件"); } //指针离开事件. void IPointerExitHandler.OnPointerExit(PointerEventData eventData) { Debug.Log("OnPointerExit指针离开事件"); } //指针抬起事件.(实现接口是这种格式的,效果都一样) public void OnPointerUp(PointerEventData eventData) { Debug.Log("OnPointerUp指针抬起事件"); } }
Button 按钮组件和 Toggle 复选框组件,这两个组件都具备单击的功能,它们的单击就是通过实现
IPointerClickHandler 这个接口实现的。
这些“事件接口”好比是“一个一个的机械零件”,而 UGUI 中的 UI 组件就是这些零件拼接成的“机械
成品”。在开发中我们也可以根据自己的功能需求,把 这些“机械零件”拿来,拼接实现自己的“机械
成品”。
事件触发器:
事件触发器就相当于Button的事件绑定面板。
注:面板绑定比代码绑定要麻烦,本人一般不用,仅做了解即可。
使用步骤:
①首先给需要添加事件的 UI 物体添加 EventTrigger 组件;
②点击“Add New Event Type”,添加一个新的事件;
③脚本内添加对应的事件处理方法,拖拽到指定的事件面板位置;
④绑定好脚本方法后,选择的事件必须和Add New Event Type的事件保持一致。【如下图示例】
脚本代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class TriggerDemo : MonoBehaviour { public void PointerEnter(BaseEventData EventData) { Debug.Log("PointerEnter"); //强制转换为PointerEventData类型. PointerEventData ped = EventData as PointerEventData; Debug.Log(ped.position); } public void PointerExit(BaseEventData EventData) { Debug.Log("PointerExit"); } public void PointerDown(BaseEventData EventData) { Debug.Log("PointerDown"); } public void PointerUp(BaseEventData EventData) { Debug.Log("PointerUp"); } public void PointerClick(BaseEventData EventData) { Debug.Log("PointerClick"); } }
在代码中接口实现的方式,重写的方法参数都是:PointerEventData 类型,如 拖拽事件接口、指
针事件接口;
但 EventTrigger 事件触发器上拖拽的方法必须是 BaseEventData 类型,或者空;
如果想用 PointerEventData 中的属性的时候,需要进行类型的强转(如上需要使用position则需要
先进行类型转换)。
最后
以上就是怕孤独柠檬最近收集整理的关于Unity UI常用事件接口的全部内容,更多相关Unity内容请搜索靠谱客的其他文章。
发表评论 取消回复