Unity UGUI的Mask(遮罩)组件的介绍及使用

1. 什么是Mask组件?

Mask(遮罩)组件是Unity UGUI中的一个重要组件,用于限制子对象的可见区域。通过设置遮罩组件,可以实现一些特殊效果,如显示部分图片、裁剪文本等。

2. Mask组件的工作原理

Mask组件通过将子对象与遮罩对象进行比较,只显示与遮罩对象重叠的部分,从而实现遮罩效果。遮罩对象可以是任意形状的UI元素,如Image、RawImage等。

3. Mask组件的常用属性

  • Show Mask Graphic:是否显示遮罩对象的图形。
  • Mask Interaction:遮罩对象的交互方式,可选择None、Visible Inside Mask和Visible Outside Mask。
  • Alpha Cutoff:遮罩对象的透明度阈值,用于控制遮罩的显示范围。

4. Mask组件的常用函数

  • IsRaycastLocationValid:判断指定位置是否在遮罩范围内。
  • GetModifiedMaterial:获取经过遮罩处理后的材质。

5. 示例代码

示例1:显示部分图片

using UnityEngine;
using UnityEngine.UI; public class ImageMaskExample : MonoBehaviour
{
public Image mask;
public RawImage image; void Start()
{
mask.sprite = Resources.Load<Sprite>("MaskImage");
image.texture = Resources.Load<Texture>("Image");
image.transform.SetParent(mask.transform);
mask.GetComponent<Mask>().showMaskGraphic = false;
}
}

操作步骤:

  1. 创建一个Image对象作为遮罩对象,设置其形状为圆形。
  2. 创建一个RawImage对象作为子对象,设置其图片为需要显示的图片。
  3. 将遮罩对象和子对象添加到Canvas中。
  4. 将子对象的父对象设置为遮罩对象。
  5. 设置Mask组件的Show Mask Graphic属性为false。

示例2:裁剪文本


using UnityEngine;
using UnityEngine.UI; public class TextMaskExample : MonoBehaviour
{
public Text mask;
public Text text; void Start()
{
mask.text = "Mask Text";
text.text = "Hello World";
text.transform.SetParent(mask.transform);
mask.GetComponent<Mask>().showMaskGraphic = false;
}
}

操作步骤:

  1. 创建一个Text对象作为遮罩对象,设置其文本内容。
  2. 创建一个Text对象作为子对象,设置其文本内容。
  3. 将遮罩对象和子对象添加到Canvas中。
  4. 将子对象的父对象设置为遮罩对象。
  5. 设置Mask组件的Show Mask Graphic属性为false。

示例3:动态遮罩



using UnityEngine;
using UnityEngine.UI; public class DynamicMaskExample : MonoBehaviour
{
public Image mask;
public RawImage image; void Start()
{
mask.sprite = Resources.Load<Sprite>("MaskImage");
image.texture = Resources.Load<Texture>("Image");
image.transform.SetParent(mask.transform);
mask.GetComponent<Mask>().showMaskGraphic = false; // 动态修改遮罩对象的形状
mask.rectTransform.sizeDelta = new Vector2(200, 200);
}
}

操作步骤:

  1. 创建一个Image对象作为遮罩对象,设置其形状为矩形。
  2. 创建一个RawImage对象作为子对象,设置其图片为需要显示的图片。
  3. 将遮罩对象和子对象添加到Canvas中。
  4. 将子对象的父对象设置为遮罩对象。
  5. 在代码中动态修改遮罩对象的形状。

示例4:遮罩交互



using UnityEngine;
using UnityEngine.UI; public class InteractionMaskExample : MonoBehaviour
{
public Image mask;
public RawImage image; void Start()
{
mask.sprite = Resources.Load<Sprite>("MaskImage");
image.texture = Resources.Load<Texture>("Image");
image.transform.SetParent(mask.transform);
mask.GetComponent<Mask>().showMaskGraphic = false;
mask.GetComponent<Mask>().maskInteraction = MaskInteraction.VisibleInsideMask;
}
}

操作步骤:

  1. 创建一个Image对象作为遮罩对象,设置其形状为圆形。
  2. 创建一个RawImage对象作为子对象,设置其图片为需要显示的图片。
  3. 将遮罩对象和子对象添加到Canvas中。
  4. 将子对象的父对象设置为遮罩对象。
  5. 设置Mask组件的Mask Interaction属性为Visible Inside Mask。

示例5:透明度阈值



using UnityEngine;
using UnityEngine.UI; public class AlphaCutoffMaskExample : MonoBehaviour
{
public Image mask;
public RawImage image; void Start()
{
mask.sprite = Resources.Load<Sprite>("MaskImage");
image.texture = Resources.Load<Texture>("Image");
image.transform.SetParent(mask.transform);
mask.GetComponent<Mask>().showMaskGraphic = false;
mask.GetComponent<Mask>().alphaCutoff = 0.5f;
}
}

操作步骤:

  1. 创建一个Image对象作为遮罩对象,设置其形状为矩形。
  2. 创建一个RawImage对象作为子对象,设置其图片为需要显示的图片。
  3. 将遮罩对象和子对象添加到Canvas中。
  4. 将子对象的父对象设置为遮罩对象。
  5. 设置Mask组件的Alpha Cutoff属性为0.5。

6. 注意事项

  • 遮罩对象和子对象需要添加到同一个Canvas中。
  • 子对象的父对象必须设置为遮罩对象。
  • 遮罩对象的形状可以通过修改RectTransform的sizeDelta属性来调整。
  • 遮罩对象的形状可以是任意形状的UI元素,如Image、RawImage等。

7. 参考资料

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

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

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

  2. Unity UGUI

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

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

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

  4. 画地为Mask,随心所欲的高效遮罩组件[Unity]

    在上一篇博文"扔掉遮罩,更好的圆形Image组件"中,笔者改变Image的顶点数据,使得Image呈圆形显示,避免了Mask的使用,从而节省Drawcall消耗,提高渲染效率了.这 ...

  5. vux 中popup 组件 Mask 遮罩在最上层问题的解决

    1. 问题描述:popup弹出层在遮罩层下面的 2.原因:因为滚动元素和mask遮罩层在同一级,vux框架默认把遮罩层放在body标签下的 3.解决方法:更改一下源码,把mask遮罩层放在popup同 ...

  6. vue----子组件引用vux popup mask遮罩在最上层解决办法 z-index问题

    在一个页面的子组件中引用vux的popup组件时,出现mask遮罩在最上层的问题,百度了一下发现有两种解决办法,现提供第三种. popup在子组件引用时,vux将vux-popup-mask默认添加到 ...

  7. Unity UGUI —— 无限循环List

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

  8. [Unity UGUI]ScrollRect效果大全

    UGUI各种优化效果 本文所实现的UGUI效果需求如下: - 支持缩放滑动效果 - 支持动态缩放循环加载 - 支持大数据固定Item复用加载 - 支持不用Mask遮罩无限循环加载 - 支持Object ...

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

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

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

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

随机推荐

  1. linux下的一道堆上的格式化字符串漏洞题分析分享

    简单分享一下解题过程. 下载题目,里面有三个文件,如图: DockerFIle文件: net.sh文件: shell文件是一个elf,文件情况: 64位,Full RELO,NX,PIE 丢进IDA看 ...

  2. R的基本用法2

    title: "Lectures" author: '01' date: "2022-09-23" output: pdf_document knitr::op ...

  3. 快速上手Linux核心命令(三):文件和目录操作命令

    @ 目录 前言 cd 切换目录 pwd 显示当前路径 ls 显示目录下内容及相关属性信息 mkdir 创建目录 tree 以树形结构显示目录下的内容 touch 创建空白文件或改变文件的时间戳属性 c ...

  4. 阿里云 AIGC 白嫖 FC 搭建 stable diffusion

    下午瞎逛在 V 站看到阿里在做推广,正好这几天在研究 stable-diffusion,就进去看了看,活动地址: https://developer.aliyun.com/topic/aigc . 主 ...

  5. TED--10 ways to have a better conversation

    10 ways to have a better conversation All right, I want to see a show of hands: how many of you have ...

  6. SQLite3数据库的介绍和使用(面向业务编程-数据库)

    SQLite3数据库的介绍和使用(面向业务编程-数据库) SQLite3介绍 SQLite是一种用C语言实现的的SQL数据库 它的特点有:轻量级.快速.独立.高可靠性.跨平台 它广泛应用在全世界范围内 ...

  7. Prism Sample 7 Modules Code

    例7对注册Module使用了配置命令. 见app.xaml.cs: 1 using Modules.Views; 2 using Prism.Ioc; 3 using Prism.Modularity ...

  8. KaiOS 2.5.X 使用 WebIDE 安装以及调试第三方应用程序

    本教程将展示使用 Waterfox Classic 安装为 KaiOS 2.5.x 设计的应用,同时我们也非常推荐使用它来进行安装和调试应用. 本教程本身不会对手机产生任何损害,但请注意,你必须信任你 ...

  9. selenium IDE插件的配置使用

    开头 Selenium提供了一个可以自动录制脚本的插件 叫selenium IDE 让我们一起看看如何安装使用 安装 因为google扩展商城大多数人用不了,所以我们选用的是edag来下载seleni ...

  10. 2022-05-03:Alice 和 Bob 再次设计了一款新的石子游戏。现有一行 n 个石子,每个石子都有一个关联的数字表示它的价值。给你一个整数数组 stones ,其中 stones[i] 是第

    2022-05-03:Alice 和 Bob 再次设计了一款新的石子游戏.现有一行 n 个石子,每个石子都有一个关联的数字表示它的价值.给你一个整数数组 stones ,其中 stones[i] 是第 ...