之前我写过一篇博客关于UGUI的优化 其中提到了Mask的使用会增加性能的消耗 但是在一些情况下 使用这个会有奇效 比如小地图(Minimap)的开发 这篇博客介绍一下UGUI中的Mask的使用方法 很简单的 首先创建一个 Image 给他添加上Mask组件 在添加一个Image不弄Mask 之后把没有Mask的Image设置为有Mask的子物体 我们可以...
Float) =0_StencilWriteMask ("Stencil Write Mask", Float) =255_StencilReadMask ("Stencil Read Mask", Float) =255_ColorMask ("Color Mask", Float) =15[Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) =0}
Mask会在首尾(首=Mask节点,尾=Mask节点下的子节点遍历完后)drawcall,多个Mask间如果符合合批条件这两个drawcall可以对应合批(mask1 的首 和 mask2 的首合;mask1 的尾 和 mask2 的尾合。首尾不能合)Mask内的UI节点和非Mask外的UI节点不能合批,但多个Mask内的UI节点间如果符合合批条件,可以合批。具体来说:新...
Image.csprotectedvirtualvoidUpdateMaterial(){if(!IsActive())return;//更新刚刚替换的新的模板缓冲的材质canvasRenderer.materialCount=1;canvasRenderer.SetMaterial(materialForRendering,0);canvasRenderer.SetTexture(mainTexture);}publicvirtualMaterialmaterialForRendering{get{//遍历UI中的每个Mask组件varcomponents=Li...
Mask(遮罩)组件是Unity UGUI中的一个重要组件,用于限制子对象的可见区域。通过设置遮罩组件,可以实现一些特殊效果,如显示部分图片、裁剪文本等。 2. Mask组件的工作原理 Mask组件通过将子对象与遮罩对象进行比较,只显示与遮罩对象重叠的部分,从而实现遮罩效果。遮罩对象可以是任意形状的UI元素,如Image、RawImage等。
Unity UI Mask实现原理 查看原文 UGUI优化:批次合并源码分析及工具 / DecrementmaskMaterial Instance)。Mask实际上是前后使用或移除Stencilmask(来做像素剔除),在之间画所有子UI元素,maskUI下的子UI元素... Update(重新提交顶点数据)。 尽可能使用少的UIMaterial和贴图(使用图集),使得可以Batching。 相邻的UI元素(...
设置Mask组件的Show Mask Graphic属性为false。 示例3:动态遮罩 usingUnityEngine;usingUnityEngine.UI;publicclassDynamicMaskExample:MonoBehaviour{publicImage mask;publicRawImage image;voidStart(){ mask.sprite = Resources.Load<Sprite>("MaskImage");
遮罩Mask 给父对象添加Mask组件,父对象就会Alpha遮罩子对象 投影Shadow 轮廓Outline 交互组件 Interaction Components UI很重要的一环就是“交互”,例如鼠标或触摸以及使用键盘或控制器的交互。交互本身是不可见的,必须在可视化组件的组合下才能正常工作 按钮Button ...
__遮罩__不是可见的 UI 控件,而是一种修改控件子元素外观的方法。遮罩将子元素限制(即“掩盖”)为父元素的形状。因此,如果子项比父项大,则子项仅包含在父项以内的部分才可见。
UGUI的Mask实现原理:利用GPU的模版缓冲 Mask组件会赋给父级和子级UI一个特殊的材质,这个材质会给Image的每个像素点进行标记并放在一个称为Stencil Buffer的缓存内,父级每个像素点的标记设置为1,子级UI进行渲染的时候会去检查这个Stencil Buffer内的标记是否为1,如果为1则进行渲染,否则不渲染 ...