Unity Mask 遮罩无效 解决方案
前言
本人开发的APP有着需要发布到手机、Pico一体机、华为Glass眼镜上的需求,因此项目是一个多合一的工程。由此在制作如文字滑动的效果时,遇到了一个问题,Unity自带的Mask无法实现全平台遮罩。针对这点,进行了探索测试。Unity 开发版本 2018.4.26f1
一、Mask 解决方案 尝试
Mask方案:使用Unity 自带的Mask + 遮罩图片不能为全透明。
该方案由友人提出,在其工程上实现了PC、手机、一体机等多平台的遮罩效果。
但是,将该方法用到我的工程上测试,手机端无法遮罩,其它平台有效。
下图:Mask遮罩设置
二、Rect Mask 2D 解决方案 尝试
RectMask2D方案:使用Unity 自带的RectMask2D + 遮罩图片。
在上述Mask方案无效的情况下,通过百度寻得的方案。
经过测试,全平台都能够实现遮罩效果
但是,测试过程中,在一体机端发现了一个问题,使用Scroll View进行滑动,被遮罩的部分无法显示。
手机端、PC端正常遮罩无Bug
下图:RectMask2D遮罩设置
三、Soft Mask 解决方案 尝试
SoftMask方案:使用SoftMask + 遮罩图片。
遮罩图片Image中的SourceImage, 选择不是Unity自带的UIMask图片之外的其它任意图片。
SoftMask—MaskChannel:选择非Alpha模式
使用UNITY的 Text文本测试,全平台都能够实现遮罩效果
但是,开发使用TextMeshProUGUI,在测试过程中全平台都无遮罩效果,后发现了SoftMask的报错:
Some of children’s shaders are not supported. mask won’t work on these elements,see the documentation for more details about how to a add soft mask support to custom shaders.
仅此推断是TextMeshProUGUI使用的shader无效
后替换SoftMask自带的Shader,实现遮罩效果,且无上述2方案BUG
下图:SoftMask遮罩设置