IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity UI常用事件接口 -> 正文阅读

[游戏开发]Unity UI常用事件接口

UI 组件本身实现了大量的接口,用这些接口来扩展本身的功能。

接口命名规则:IxxxHandler。

I:前缀,表示它是一个接口;

xxx:它本身的名字;IDragHandler[拖拽处理器接口]

Handler:后缀,表示它是一个特定功能的处理器。

使用步骤:

①在使用 UGUI 中的事件的时候,需要在脚本内引入专有命名空间using?UnityEngine.EventSystems;

②在当前类继承的父类的后方,用逗号分隔,写需要使用到接口名;

③鼠标放到接口名上,Alt+Enter-->实现接口 / 显示实现接口;

④编写方法体;

拖拽事件接口:

IBeginDragHandler:开始拖拽事件处理器;开始拖拽的一瞬间触发。

IDragHandler:拖拽中事件处理器;拖拽过程中持续触发

IEndDragHandler:结束拖拽事件处理器;拖拽结束的一瞬间触发。

拖拽事件改变UI图片的位置:

using 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:指针单击事件处理器;指针按下+抬起=单击。

using 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的事件保持一致。【如下图示例】

?脚本代码:

using 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则需要

先进行类型转换)。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 18:32:01  更:2022-05-24 18:32:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/25 23:26:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码