首页 > 其他分享 >Unity UGUI的RectMask2D(2D遮罩)组件的介绍及使用

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

时间:2023-07-22 19:55:18浏览次数:37  
标签:遮罩 rectMask RectMask2D public 2D 组件 Example

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组件进行调整。
  • 遮罩范围的形状可以通过修改遮罩物体的形状来实现。

参考资料

标签:遮罩,rectMask,RectMask2D,public,2D,组件,Example
From: https://www.cnblogs.com/alianblank/p/17574118.html

相关文章

  • c#控制台上开发的2D闯关小游戏
    ​初学者可以看看 学习一下编程思想还有游戏思想.好了话不多说上代码大家自己看哈. usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Threading;namespaceDevilDungeonCV{  ......
  • 电容式触摸按键感应低功耗触摸IC芯片VK3702DM/VK3702TM/VK3702OM抗干扰触摸芯片
    产品型号(封装形式):VK3702DM  ——(SOP8)     VK3702TM  ——(SOP8)   VK3702OM——(SOP8)   产品品牌:永嘉微电/VINKA产品年份:新年份原厂,工程服务,技术支持!  产品简介:VK3702TM提供2个触摸感应按键,一对一的Toggle模式输出,提供低功耗模式,可使用于电......
  • 【dp,建模】AGC032D Rotation Sort
    ProblemLink有一个长为\(n\)的排列\(p\),给定\(A,B\),你每次可以做以下两种操作之一:选取\(l,r\),将\(p[l:r]\)循环右移,代价为\(A\);选取\(l,r\),将\(p[l:r]\)循环左移,代价为\(B\)。求将\(p\)排序所需的最小代价。\(n\le5000\)。技巧:循环移位→插入→实数坐......
  • 镂空显示效果——轨道遮罩键
    写出文字把烟花放在文字上面效果-轨道遮罩键放到视频1遮罩视频2就可以做出这种效果了要做出字线性出现的感觉效果-线性擦除,用在文字上......
  • glTexImage2D: 读取位置XXX时发生访问冲突。
    在跟着LearnOpenGL教程学习纹理部分时,你或许会加载一张自己喜欢的图片作为纹理,但加载某些图片时会报以下错误:读取位置XXX时发生访问冲突。这个错误通常出现在以下部分:unsignedchar*data=stbi_load("demo.jpg",&image_width,&image_height,&image_channel,0);if(da......
  • CF512D Fox And Travelling 题解--zhengjun
    计数好题。首先对于每个连通块独立考虑,最后合并答案。发现点数超过1的强连通分量一定删不掉。若连通块中存在点数超过1的强连通分量tarjan缩点之后,称这些点数超过1的强连通分量为关键点;那么两关键点之间的点也不能删;于是对于剩下的点直接dp即可,由于可删的子树......
  • r2dbc mysql
    R2DBCMySQL:异步响应式数据库访问的新时代在传统的JDBC(JavaDatabaseConnectivity)中,数据库访问通常是同步的,这意味着当你执行一个查询或更新时,你必须等待数据库返回结果,然后再进行下一步操作。然而,随着异步编程的兴起,开发者对于更高效的数据库访问方式有了更高的期望。在这篇文章......
  • [ARC162D] Smallest Vertices
    [ARC162D]SmallestVerticesAtcoder:[ARC162D]SmallestVertices洛谷:[ARC162D]SmallestVerticesProblem在本问题中,当我们提到有根有向树时,我们指的是所有边都指向从根到叶子的有根树。给定一个使得其总和为\(N-1\)的非负整数序列\(d=(d_1,d_2,\ldots,d_N)\)。对于带编......
  • abc082d <bitset 状压dp>
    题目D-FTRobot思路动态规划的方式记录每次行动后,机器人在坐标系中所有可能位置通过bitset对状态进行压缩,即每个位置有机器人trueor没有false因为机器人仅按坐标轴方向前进,因而可将xy坐标状态分开存储,进一步降低计算量,也方便使用bitset通过bitset的移位......
  • 【Cocos2d-x】升级Spine 3.8.95
    转载,原文连接:https://www.cnblogs.com/tomaszheng/p/14807373.html#!comments从Spine官方下载3.8.95版本的spine-cpp、spine-cocos2dx;删除cocos2d-x/cocos/editor-support/spine中所有的旧版本的spine代码;把spine-cpp、spine-cocos2dx所有源文件全部拷贝到cocos2d-x/cocos/ed......