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

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

<think>好的,我现在需要帮助用户找到Unity UGUI相关的学习资料、教程和资源下载。首先,用户已经提供了几个引用链接,我需要先仔细看看这些引用的内容,看看是否有可以直接推荐的资源。 引用[1]提到的是Unity UI系统(uGUI)的源代码,项目地址在GitCode上。这可能对用户有帮助,特别是如果他们想深入了解UGUI的内部实现或者进行自定义开发。这个源代码库应该是一个重要的资源,可以推荐给用户。 引用[2]是关于UGUI的六大组件和三大基本控件的详细解析,其中包括Image控件的参数说明。这可能是一个教程性质的资源,适合用户学习基础组件,应该建议用户查阅这部分内容来掌握基础。 引用[3]讨论了UGUI学习,特别是字体资源的导入和富文本标签的使用,以及Image控件的应用。这里提到富文本的使用方法,这对用户处理文本样式可能有帮助,需要指出这一点。 引用[4]讲解了图集的使用,涉及Sprite的剪切和资源管理。图集在优化UI性能方面很重要,用户可能需要这方面的知识,特别是资源管理部分,值得推荐。 引用[5]详细说明了Image控件中Source Image的设置,包括如何正确导入图片资源为Sprite格式。这对于正确使用UGUI的图片组件至关重要,用户需要了解这部分内容。 接下来,用户的需求是寻找教程、资源和下载链接。我需要将这些引用中的信息整理成结构化的建议,涵盖官方资源、源代码、教程指南、优化技巧以及社区资源。同时,用户可能对如何下载和安装这些资源有疑问,需要提供具体的步骤或链接。 需要确保回答符合格式要求,使用正确的中文,避免Markdown,行内公式用$...$,独立公式用$$...$$,但在这个问题中可能数学公式较少,主要关注资源推荐。同时,生成的相关问题需要与UGUI学习相关,比如组件使用、性能优化、资源管理等。 最后,检查是否有遗漏的信息,比如是否还有其他重要的学习平台或资源,如Unity Learn官方网站、YouTube教程、GitHub仓库等,但根据提供的引用,可能主要围绕已有的引用内容展开,适当补充常见资源如官方手册和社区论坛。</think>### Unity UGUI 学习资源整理 #### 1. **官方文档与源码** - **UGUI源码**:可通过GitCode访问官方UGUI系统源码,适合深入理解底层实现。项目地址:[uGUI Source code](https://gitcode.com/gh_mirrors/ugu/uGUI) [^1]。 - **Unity官方手册**:搜索“Unity UI Essentials”或访问Unity Learn平台,包含UGUI基础到进阶教程。 #### 2. **教程与指南** - **基础控件解析**:引用[2]详细讲解了UGUI的六大组件(如Canvas、EventSystem)和三大基础控件(如Image、Text),适合入门学习[^2]。 - **富文本与字体**:引用[3]提到富文本标签(如`<b>`加粗)的使用方法,可结合Unity官方字体资源管理学习[^3]。 #### 3. **图集与资源优化** - **图集制作**:引用[4]说明图集在UGUI中的应用,推荐使用Unity Sprite Editor分割图集以优化性能[^4]。 - **图片导入设置**:引用[5]强调需将图片的Texture Type设为**Sprite (2D and UI)**,否则无法在Image控件中正常显示[^5]。 #### 4. **代码实践与示例** ```csharp // 示例:动态修改Image的Sprite public Image targetImage; public Sprite newSprite; void Start() { targetImage.sprite = newSprite; } ``` - **关键点**:通过代码控制UI元素时,需确保组件引用正确(如`GetComponent<Image>()`)。 #### 5. **社区与拓展资源** - **Unity论坛**:访问[Unity社区](https://forum.unity.com/)搜索“UGUI”,获取开发者经验分享。 - **GitHub仓库**:搜索“Unity-UGUI-Tutorials”可找到开源项目与案例。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值