当前位置: 首页 > article >正文

Unity学习之UGUI进阶

一、事件监听接口

1、作用

用于实现类型长按、双击、拖拽等基础控件无法实现的功能
所有控件都能够添加更多的事件监听来处理对应的逻辑

2、事件监听接口类型

(1)常用事件接口

在这里插入图片描述

(2)不常用事件接口

在这里插入图片描述

3、使用事件监听接口

(1)使用方法

a、引用命名控件using UnityEngine.EventSystems;
b、继承接口
c、实现接口中的内容
d、将该脚本挂载到想要监听自定义事件的UI控件上

(2)具体实现例子

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class L8 : MonoBehaviour,IPointerEnterHandler,IPointerExitHandler,IPointerDownHandler,IPointerUpHandler
{

    public void OnPointerEnter(PointerEventData eventData)
    {
        print("鼠标进入");
        
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        print("鼠标离开");
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        print("鼠标抬起");
    }
    public void OnPointerDown(PointerEventData eventData)
    {
        print("鼠标按下");
    }
}

4、PointerEventData参数的关键内容

在这里插入图片描述

5、总结

(1)好处

可以实现一些长按、双击拖拽等功能

(2)坏处

不方便管理,需要自己写脚本继承接口挂载到对应控件上,比较麻烦

二、事件触发器

1、作用

EventTrigger,集成了所有事件接口的脚本,可以更加方便地位控件添加事件监听

2、如何使用事件触发器

(1)拖拽脚本进行关联

在这里插入图片描述
在这里插入图片描述

(2)使用代码进行添加关联

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class EnvTrigger : MonoBehaviour
{
    public EventTrigger envTrigger;
    // Start is called before the first frame update
    void Start()
    {
        //声明一个希望监听的事件对象
        EventTrigger.Entry entry = new EventTrigger.Entry();
        //声明 事件的类型
        entry.eventID = EventTriggerType.PointerDown;
        //监听函数关联
        entry.callback.AddListener((data) =>
        {
            print("鼠标按下" + "  " + data);
        });

        //将声明好的事件对象 加入到EventTrigger中
        envTrigger.triggers.Add(entry);
    }
}

3、总结

EventTrigger可以让我们写更少的代码,可以在面板类中处理面部控制的事件逻辑,更加的面向对象,便于管理

三、屏幕坐标转UI坐标

1、RectTransformUtility类

RectTransformUtility类,是RectTransform的辅助类
主要用于进行一些坐标的转换
其中最重要的函数就是将屏幕控件上的点,转换成UI本地坐标下的点

2、将屏幕坐标转换成UI本地坐标系下的点

(1)方法

RectTransformUtility.ScreenPointToLocalPointInRectangle(参数一,参数二,参数三,参数四)
参数一:相对父对象
参数二:屏幕点
参数三:摄像机
参数四:最终得到的点
一般配合拖拽事件使用

public void OnDrag(PointerEventData eventData)
    {
        Vector2 UIposition;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(this.transform.parent as RectTransform,eventData.position,eventData.pressEventCamera,out UIposition);
        this.transform.localPosition = UIposition;
        print("屏幕坐标" + eventData.position);
        print("UI坐标" + UIposition);
    }

四、遮罩

1、作用

在不改变图片的情况下,让图片在游戏中只显示其中一部分

2、使用方法

(1)关键组件 Mask

实现遮罩效果需要添加Mask组件
通过在父对象上添加Mask组件即可遮罩其子对象

(2)注意点

想要被遮罩的Image需要勾选Maskable
只要父对象添加了Mask组件,那么所有的UI子对象都会被遮罩
遮罩父对象图片的制作,不透明的地方显示,透明的地方被遮罩

五、模型和粒子显示在UI之前

1、模型显示在UI之前

(1)方法一:直接用摄像机渲染3D物体

Canvas的渲染模式不能是覆盖模式
摄像机模式和世界模式都可以让模型显示在UI之前(Z轴元素在UI元素之前即可)
注意点:
摄像机模式时建议用专门的摄像机渲染UI相关
面板上的3D物体建议也用UI摄像机进行渲染

(2)方法二:将3D物体渲染在图片上,通过图片显示

专门使用一个摄像机渲染3D模型,将其渲染内容输出到Render Texture上
类似小地图的制作方式
再将渲染的图显示在UI
该方式,不管Canvas的渲染模型是哪种都可以使用

2、粒子特效显示在UI之前

粒子特效的显示和3D物体类似
注意点:
在摄像模式下时,可以在粒子组件的Renderer相关参数Order in Layer中改变排序层,让粒子特效始终显示在其之前不受z轴影响

六、异形按钮

1、什么是异形按钮

图片形状不是传统矩形的按钮

2、如何让异形按钮能够准确点击

(1)通过添加子对象的形式

在这里插入图片描述
增加多个透明子对象,将透明子对象拼凑出异形形状,从而实现异形按钮

(2)通过代码改变图片的透明度相应阈值

在这里插入图片描述

	public Image image;
    // Start is called before the first frame update
    void Start()
    {
        image.alphaHitTestMinimumThreshold = 0.1f;
    }

七、CanvasGroup

1、作用

实现整体控制一个面板的淡入淡出或者整体禁用

2、主要属性

在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/488202.html

相关文章:

  • android studio使用DataBinding
  • Unity使用Vuforia插件进行AR开发
  • Django REST framework 源码剖析-视图集详解(ViewSet)
  • 使用Logstash 将Mysql的数据导入ElasticSearch中
  • (超详细)Maven安装配置、以及在IDEA中创建Maven项目
  • LeetCode 2765. 最长交替子数组解析与解题思路
  • 机器学习之过拟合(算法参数,超参数) 欠拟合(模型参数)
  • 简单的spring boot tomcat版本升级
  • 解决Qt打印中文字符出现乱码
  • plane开源的自托管项目
  • 《Spring Framework实战》13:4.1.4.4.延迟初始化Bean
  • qml Column详解
  • 0109鹅厂面经
  • 媒体资源生产转码过程
  • Formality:默认配置文件
  • 国产信创实践(国能磐石服务器操作系统CEOS +东方通TongHttpServer)
  • 【海南省】乡镇界arcgis格式shp数据乡镇名称和编码gis矢量数据
  • 设TCP的门限值的初始值为10个报文段,当拥塞窗口上升到24时网络发生了超时,TCP使用慢开始和拥塞避免后第一轮的拥塞窗口大小是,门限值为
  • pytorch torch.clamp函数介绍
  • 在职研生活学习--20250108~开题报告随想