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、主要属性

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/950881.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis为 List/Set/Hash 的元素设置单独的过期时间

一.业务简介 我们知道,Redis 里面暂时没有接口给 List、Set 或者 Hash 的 field 单独设置过期时间,只能给整个列表、集合或者 Hash 设置过期时间。 这样,当 List/Set/Hash 过期时,里面的所有 field 元素就全部过期了。但这样并不…

【Notepad++】Notepad++如何删除包含某个字符串所在的行

Notepad如何删除包含某个字符串所在的行 一,简介二,操作方法三,总结 一,简介 在使用beyoundcompare软件进行对比的时候,常常会出现一些无关紧要的地方,且所在行的内容是变化的,不方便进行比较&…

APP上架之Android 证书 MD5 指纹

Android 证书 MD5 指纹 1. 什么是 Android 证书 MD5 指纹? Android 证书 MD5 指纹是对证书数据进行 MD5 哈希运算后得到的 128 位字符串。在 Android 开发中,每个证书在理论上都有一个唯一的 MD5 指纹,用于识别和验证证书的有效性。证书指纹…

软件安全性测试有哪些测试方法?

随着数字化进程的加速,软件在各个领域扮演着越来越重要的角色。软件的安全性测试作为保证软件质量和安全的重要环节,逐渐成为企业在开发和部署过程中不可或缺的一部分。 一、软件安全性测试的测试方法   1、静态分析法:通过分析源代码或二…

LabVIEW轴承性能测试系统

本文介绍了基于LabVIEW的高效轴承性能测试系统的设计与开发。系统通过双端驱动技术实现高精度同步控制,针对轴承性能进行全面的测试与分析,以提高轴承的可靠性和寿命。 项目背景 随着工业自动化程度的提高,对轴承的性能要求越来越高。传统的…

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景 实现效果 该案例实现了使用Three.js创建一个带有聚光灯和旋转立方体的3D场景。 知识点 WebGLRenderer(WebGL渲染器) THREE.WebGLRenderer 是 Three.js 中用于将场景渲染为 WebGL 内容的核…

如何使用vue引入three.js

在 Vue.js 项目中引入和使用 Three.js 是一个常见的需求,Three.js 是一个用于在浏览器中创建和显示动画 3D 计算机图形的 JavaScript 库。以下是一个基本的示例,展示如何在 Vue 项目中引入和使用 Three.js。 1. 创建 Vue 项目 如果你还没有一个 Vue 项…

9.4 visualStudio 2022 配置 cuda 和 torch (c++)

一、配置torch 1.Libtorch下载 该内容看了【Libtorch 一】libtorchwin10环境配置_vsixtorch-CSDN博客的博客,作为笔记用。我自己搭建后可以正常运行。 下载地址为windows系统下各种LibTorch下载地址_libtorch 百度云-CSDN博客 下载解压后的目录为: 2.vs…

【JavaEE进阶】获取Cookie/Session

🍀Cookie简介 HTTP协议自身是属于 "⽆状态"协议. "⽆状态"的含义指的是: 默认情况下 HTTP 协议的客⼾端和服务器之间的这次通信,和下次通信之间没有直接的联系.但是实际开发中,我们很多时候是需要知道请求之间的关联关系的. 例如登陆⽹站成…

oscp备考 oscp系列——Kioptix Level 1靶场 古老的 Apache Vuln

目录 前言 1. 主机发现 2. 端口扫描 3. 指纹识别 4. 目录扫描 5. 漏洞搜索和利用 前言 oscp备考,oscp系列——Kioptix Level 1靶场 Kioptix Level 1难度为简单靶场,主要考察 nmap的使用已经是否会看输出,以及是否会通过应用查找对应漏…

CSS——2.书写格式一

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><!--css书写中&#xff1a;--><!--1.css 由属性名:属性值构成--><!--style"color: red;font-size: 20px;&quo…

IT面试求职系列主题-人工智能(一)

想成功求职&#xff0c;必要的IT技能一样不能少&#xff0c;再从人工智能基础知识来一波吧。 1&#xff09;您对人工智能的理解是什么&#xff1f; 人工智能是计算机科学技术&#xff0c;强调创造能够模仿人类行为的智能机器。这里智能机器可以定义为能够像人一样行动、像人一…

Gitee图形界面上传(详细步骤)

目录 1.软件安装 2.安装顺序 3.创建仓库 4.克隆远程仓库到本地电脑 提交代码的三板斧 1.软件安装 Git - Downloads (git-scm.com) Download – TortoiseGit – Windows Shell Interface to Git 2.安装顺序 1. 首先安装git-2.33.1-64-bit.exe&#xff0c;顺序不能搞错2. …

js迭代器模式

以前JS原生的集合类型数据结构&#xff0c;只有Array&#xff08;数组&#xff09;和Object&#xff08;对象&#xff09;&#xff1b; 而ES6中&#xff0c;又新增了Map和Set。四种数据结构各自有着自己特别的内部实现&#xff0c;但我们仍期待以同样的一套规则去遍历它们&…

C语言初阶习题【25】strcpy的模拟实现

1. 首先先调用下库函数&#xff0c;看它实现了什么 2. 我们自己实现一个strcpy函数 3. 改进1 把*destnation和source 写上去&#xff0c;使用后置 4. 改进2 这里直接把赋值操作放到了while的判断条件里面&#xff0c;然后while循环语句什么都不做&#xff0c;放了一个空语句…

【超详细】MIT 液态神经网络(LNNs)——深度学习新动向

✅作者简介:双一流博士,人工智能领域学习者,深耕机器学习,交叉学科实践者。已发表SCI1/区top论文10+,授权专利4件,公开10+。可提供专利思路和指导,提供科研小工具,分享科研经验,欢迎交流! 📌个人主页: https://blog.csdn.net/allein_STR?spm=1011.2559.3001.5343…

某讯一面,有点难度

今天分享的是训练营的朋友在某讯外包的面经&#xff0c;他在面完后跟我说&#xff1a;数据一致性策略好久没问,有点忘了&#xff0c;所以这一块答的不太好。 我一直都会和大家强调复习的重要性&#xff0c;尤其是这种常见的问题。看看下面的问题你都能答得上来吗&#xff1f; …

汽车免拆诊断 | 2017 款东风风神 AX7 车热机后怠速不稳

故障现象 一辆2017款东风风神AX7车&#xff0c;搭载DFMA14T发动机&#xff0c;累计行驶里程约为13.7万km。该车冷起动后怠速运转正常&#xff0c;热机后怠速运转不稳&#xff0c;组合仪表上的发动机转速表指针上下轻微抖动。 故障诊断  用故障检测仪检测&#xff0c;发动机控…

SSL 证书格式和证书文件扩展名:完整指南

SSL 证书是什么以及它如何工作相当容易理解。但当涉及到在服务器上安装它时&#xff0c;有时&#xff0c;你可能觉得这是在处理火箭科学。 由于有如此多的SSL 证书格式与特定服务器要求相关&#xff0c;您更有可能感到困惑和沮丧&#xff0c;而不是从一开始就正确配置证书。但…

在ubuntu22.04中使用bear命令追踪内核编译报错的原因分析和解决方案

1.说明 我在ubuntu22.04中使用bear命令追踪内核编译时发生如下报错&#xff1a; 如图&#xff0c;在链接名为libexec.so的动态库时发生错误 2 分析及解决过程 打印变量 LIB 发现其为空&#xff0c;也就是说 bear会去 /usr/bear/ 去找 libexec.so 去看一下 /usr/bear/是否存…