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. c#快速入门~在java基础上,知道C#和JAVA 的不同即可

    观看下文前提:如果你的主语言是java,现在想再学一门新语言C#,下文是在java基础上,对比和java的不同,快速上手C# C# 学习参考文档和开发工具 微软c#官方文档:https://learn ...

  2. Windows 下无法使用 C++11 标准 thread 类

    问题描述 最近需要在 windows 平台使用 C++ 多线程编程,编译时提示错误 thread is not a member of std, or you maybe forget '#inclu ...

  3. Semantic Kernel 入门系列:🥑突破提示词的限制

    无尽的上下文 LLM的语言理解和掌握能力在知识内容的解读和总结方面提供了强大的能力. 但是由于训练数据本身来自于公共领域,也就注定了无法在一些小众或者私有的领域能够足够的好的应答. 因此如何给LLM ...

  4. Go语言网络编程:SSH连接

    旨在提升Go语言网络编程能力 SSH是什么? SSH 为 Secure Shell 的缩写,为建立在应用层基础上的安全协议.SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用 SS ...

  5. Yolov8离谱报错

    YoloV8离谱报错 ​ 今天下午给一个研究生小姐姐跑数据集,用的是yolov8在恒源云上租的4070的GPU服务器,跑垃圾分类数据集(https://blog.csdn.net/m0_5488250 ...

  6. Django 静态文件 request对象方法 pycharm和Django连接MySQL Django模型层初步了解 基本的ORM操作

    目录 静态文件 一.概念 静态文件:不经常变化的文件,主要针对html文件所使用到的各种资源. 例如:css文件.js文件.img文件.第三方框架文件 ps: Django针对静态文件资源需要单独在根 ...

  7. shell脚本编程(一)

    c81ba641-5ed7-4ab9-a7c0-e319e0f3890b 初识shell脚本编程 最近项目需求,需要了解下shell脚本编程,所以自己就必须玩玩了= = 初识shell脚本编程,找了几 ...

  8. Swift WisdomProtocol 面向协议编程(下)

    WisdomProtocol 面向协议编程(下) @[TOC] WisdomProtocol SDK 面向协议编程 # Welcome to use WisdomProtocol WisdomProt ...

  9. 2023-04-06:拥抱Golang,优化FFmpeg音频编码器,探究encode_audio.c的内部结构。

    2023-04-06:拥抱Golang,优化FFmpeg音频编码器,探究encode_audio.c的内部结构. 答案2023-04-06: 见moonfdd/ffmpeg-go库. 这段代码是一个示 ...

  10. 2023-03-21:音视频解混合(demuxer)为MP3和H264,用go语言编写。

    2023-03-21:音视频解混合(demuxer)为MP3和H264,用go语言编写. 答案2023-03-21: 步骤1:安装github.com/moonfdd/ffmpeg-go go get ...