Unity UGUI的RectMask2D(2D遮罩)组件的介绍及使用

1. 什么是RectMask2D组件?

RectMask2D是Unity UGUI中的一个组件,用于实现2D遮罩效果。它可以限制子对象在指定的矩形区域内显示,超出区域的部分将被遮罩隐藏。

2. RectMask2D的工作原理

RectMask2D组件通过裁剪子对象的渲染区域来实现遮罩效果。它使用一个矩形区域作为遮罩范围,只有在该范围内的子对象才会被显示出来。

3. RectMask2D的常用属性

  • Show Mask Graphic: 是否显示遮罩的图形,可以用于调试遮罩范围。
  • Softness: 遮罩边缘的柔化程度,值越大边缘越柔化。
  • Padding: 遮罩范围与子对象之间的边距。

4. RectMask2D的常用函数

  • PerformClipping(): 执行裁剪操作,将子对象的渲染区域限制在遮罩范围内。

5. 完整例子代码

例子1:基本使用

using UnityEngine;
using UnityEngine.UI; public class Example : MonoBehaviour
{
public RectMask2D rectMask; private void Start()
{
rectMask.enabled = true;
}
}

操作步骤

  1. 创建一个空物体,并添加RectMask2D组件。
  2. 将需要被遮罩的子对象作为该物体的子对象。
  3. 将RectMask2D组件拖拽到Example脚本的rectMask变量上。
  4. 运行游戏,子对象将只在遮罩范围内显示。

例子2:动态调整遮罩范围

using UnityEngine;
using UnityEngine.UI; public class Example : MonoBehaviour
{
public RectMask2D rectMask;
public RectTransform maskRect; private void Update()
{
rectMask.rectTransform.sizeDelta = maskRect.sizeDelta;
}
}

操作步骤

  1. 创建一个空物体,并添加RectMask2D组件。
  2. 将需要被遮罩的子对象作为该物体的子对象。
  3. 创建一个UI元素,作为遮罩范围的参考。
  4. 将RectMask2D组件拖拽到Example脚本的rectMask变量上。
  5. 将遮罩范围的RectTransform组件拖拽到Example脚本的maskRect变量上。
  6. 运行游戏,遮罩范围将根据参考元素的大小动态调整。

例子3:遮罩范围内的交互

using UnityEngine;
using UnityEngine.UI; public class Example : MonoBehaviour
{
public RectMask2D rectMask;
public Button button; private void Start()
{
button.onClick.AddListener(OnButtonClick);
} private void OnButtonClick()
{
Debug.Log("Button Clicked!");
}
}

操作步骤

  1. 创建一个空物体,并添加RectMask2D组件。
  2. 将需要被遮罩的子对象作为该物体的子对象。
  3. 创建一个Button,并将其作为子对象。
  4. 将RectMask2D组件拖拽到Example脚本的rectMask变量上。
  5. 将Button组件拖拽到Example脚本的button变量上。
  6. 在OnButtonClick函数中添加自定义的交互逻辑。
  7. 运行游戏,只有在遮罩范围内点击按钮才会触发交互。

例子4:遮罩范围内的滚动视图

using UnityEngine;
using UnityEngine.UI; public class Example : MonoBehaviour
{
public RectMask2D rectMask;
public ScrollRect scrollRect; private void Start()
{
scrollRect.enabled = true;
}
}

操作步骤

  1. 创建一个空物体,并添加RectMask2D组件。
  2. 将需要被遮罩的子对象作为该物体的子对象。
  3. 创建一个ScrollRect,并将其作为子对象。
  4. 将RectMask2D组件拖拽到Example脚本的rectMask变量上。
  5. 将ScrollRect组件拖拽到Example脚本的scrollRect变量上。
  6. 运行游戏,可以在遮罩范围内滚动视图。

例子5:遮罩范围内的动画效果

using UnityEngine;
using UnityEngine.UI; public class Example : MonoBehaviour
{
public RectMask2D rectMask;
public Animator animator; private void Start()
{
animator.enabled = true;
}
}

操作步骤

  1. 创建一个空物体,并添加RectMask2D组件。
  2. 将需要被遮罩的子对象作为该物体的子对象。
  3. 创建一个Animator,并将其作为子对象。
  4. 将RectMask2D组件拖拽到Example脚本的rectMask变量上。
  5. 将Animator组件拖拽到Example脚本的animator变量上。
  6. 创建动画效果并在遮罩范围内播放。

注意事项

  • RectMask2D组件只能作用于UGUI的子对象。
  • 遮罩范围的大小和位置可以通过RectTransform组件进行调整。
  • 遮罩范围的形状可以通过修改遮罩物体的形状来实现。

参考资料

Unity UGUI的RectMask2D(2D遮罩)组件的介绍及使用的更多相关文章

  1. 关于 Unity UGUI 中修改 Mask 组件下 Image 等子节点组件的材质无效的问题

    前几天同事做了一个效果,希望在原本使用了遮罩组件 Mask 的技能图标(让技能图标变成圆形)上在添加一个置灰的功能,但问题来了:因为是动态根据游戏中玩家的条件才动态置灰,以修改 Mask 下子节点 I ...

  2. Unity UGUI Layout自动排版组件用法介绍

    Unity UGUI布局组件 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...

  3. Unity UGUI

    超详细的基础教程传送门:(持续更新中) Unity UGUI之Canvas&EventSystem:http://blog.csdn.net/qq992817263/article/detai ...

  4. 使用Unity创造动态的2D水体效果

    者:Alex Rose 在本篇教程中,我们将使用简单的物理机制模拟一个动态的2D水体.我们将使用一个线性渲染器.网格渲染器,触发器以及粒子的混合体来创造这一水体效果,最终得到可运用于你下款游戏的水纹和 ...

  5. Unity UGUI —— 无限循环List

    还记得大学毕业刚工作的时候是做flash的开发,那时候看到别人写的各种各样的UI组件就非常佩服,后来自己也慢慢尝试着写,发现其实也就那么回事.UI的开发其实技术的成分相对来说不算多,但是一个好的UI是 ...

  6. 基于Unity·UGUI实现的RecycleList循环列表UI容器

    在UI功能开发实践中,列表UI容器是我们经常使用一种UI容器组件.这种组件就根据输入的数据集合生成对应数据项目.从显示的方向来说,一般就分为水平排布和垂直排布的列表容器两种.列表容器为了在有限的界面空 ...

  7. Unity UGUI图文混排源码(三) -- 动态表情

    这里是根据图文混排源码(二)进一步修改的,其他链接也不贴了,就贴一个链接就好了,第一次看这文章的同学可以先去看看其他几篇文章 Unity UGUI图文混排源码(二):http://blog.csdn. ...

  8. Unity UGUI图文混排源码(二)

    Unity UGUI图文混排源码(一):http://blog.csdn.net/qq992817263/article/details/51112304 Unity UGUI图文混排源码(二):ht ...

  9. Unity UGUI实现图文混排

    目前在unity实现图文混排的好像都是通过自定义字体然后在文本获取字符的位置,用图片替换掉图片标签,这样对于支持英文来说,并没有什么影响.然后对于中文来说就是一个相当麻烦的事了,毕竟图文混排多用于游戏 ...

  10. Unity UGUI鼠标穿透UI问题(Unity官方的解决方法)

    简述 最近在用UGUI的时候遇到了鼠标穿透的问题,就是说在UGUI和3D场景混合的情况下,点击UI区域同时也会 触发3D中物体的鼠标事件.比如下图中 这里给Cube加了一个鼠标点击改变颜色的代码,如下 ...

随机推荐

  1. 笔记五:进程间的通信(IPC通信之共享内存)

    IPC通信 IPC通信(Inter-Process Communication) 三种: 共享内存.消息队列.信号灯 这个IPC对象,肯定是存在于内核中.而且用户空间的文件系统中有没有IPC的文件类型 ...

  2. [C++核心编程] 1、内存分区模型

    文章目录 1 内存分区模型 1.1 程序运行前 1.2 程序运行后 1.3 new操作符 1 内存分区模型 C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进 ...

  3. 谁想和我一起做低代码平台!一个可以提升技术,让简历装x的项目

    序言 正如文章标题所述,最近一段时间低代码这个概念非常的火,但其实在不了解这个东西的时候觉得它真的很炫酷,从那时就萌生了做一个低代码平台的想法. 但随着时间的变化,现在市面上低代码各个业务方向的平台都 ...

  4. 文盘Rust -- rust连接oss

    作者:京东科技 贾世闻 对象存储是云的基础组件之一,各大云厂商都有相关产品.这里跟大家介绍一下rust与对象存储交到的基本套路和其中的一些技巧. 基本连接 我们以 aws 对象存储的sdk为例来说说基 ...

  5. Centos7安装JDK1.8详细步骤

    JDK 解压JDK安装文件.在终端中,进入你下载的JDK安装文件所在的目录,然后执行以下命令: tar -zxvf jdk-<版本号>-linux-x64.tar.gz 其中,<版本 ...

  6. RMQ问题ST表

    稀疏表(Sparse Table表) 解决静态RMQ,区间最值查询问题的数据结构,树状数组(BIT)解决动态前缀和问题的数据结构: 例:https://www.luogu.org/problemnew ...

  7. phalApi非常好用的php-api框架

    偶然的一天,在开源中国,找到了phalApi,看到了介绍,我一下子被吸引了,这正是我一直要找的后端生成json的API框架,有了这个造数据的系统,我前端做得更得心应手了,渐渐我有了全栈开发的想法!

  8. 欢迎来到farter的可能是最后一个用于博客的地方【

    目前先把公告栏里放一堆链接作为导航了(手机上竟然没有公告栏??? 准备从新浪博客往这里迁,整活可能也在这里? 还是复制一份公告栏的链接库吧( 歌声合成相关文章 敝个人站(好用好玩都在这) 敝渣浪博客( ...

  9. 源代码管理工具——Git

    Git是一个开源的分布式版本控制系统,用于管理软件开发中的版本控制和协作.通过Git,开发人员可以记录文件的修改历史.协作开发,以及在多个分支上进行实验性开发.Git已成为现代软件开发中不可或缺的工具 ...

  10. web自动化07-元素等待

    元素等待   1.什么是元素等待?       在定位页面元素时如果没找到,会在指定时间内一直等待的过程   2.为什么需要元素等待  网络速度慢  电脑配置低  服务器处理请求慢   3.三种元素等 ...