Mask的实现思路: 与Image组件配合工作,根据Image的覆盖区域来定位显示范围,所有该Image的子级UI元素,超出此区域的部分会被隐藏(包括UI的交互事件) Mask的实现原理: Mask会赋予Image一个特殊的材质,这个材质会给Image的每个像素点进行标记,将标记结果存放在一个缓存内(这个缓存叫做 Stencil Buffer) 当子级UI进行渲染的...
1.新建一个画布2.在Canvas下新建一个空物体,重命名为ScrollText 3.在ScrollText下新建一个Image,重命名为MaskImage调整适度大小 在Mask下添加组件Mask,用于遮蔽多出的文本内容4.在Mask下新建一个Text 在Text属性下写入你的文本 首先关闭Mask的Mask组件调整Text的大小,使其可以显示所有文字 重新打开Mask的Mask组件 ...
}// if we have a enabled Mask component then it will// generate the mask material. This is an optimisation// it adds some coupling between components though :(// 如果我们用了Mask,它会生成一个mask材质,Mask maskComponent = GetComponent<Mask>();if(m_StencilValue >0&& (maskComponent ==null...
Unity把2个Mask进行了网格合并, 3个drawcall, 分别为[2个Mask头]、[2个Image]、[2个Mask尾].这里可以看出, Mask之间是可以进行合并的, 从而不额外增加drawcall,而如果放到一起 这是因为Unity的合批需要同渲染层级(depth), 同材质, 同图集, 如果重叠了, depth就不同了, 6个drawcall分别为Mask头、Mask的Image...
1. Mask会赋予Image一个特殊的材质,这个材质会给Image的每个像素点进行标记,将标记结果存放在一个缓存内(这个缓存叫做Stencil Buffer) 2. 当子级UI进行渲染的时候会去检查这个 Stencil Buffer内的标记,如果当前覆盖的区域存在标记(即该区域在Image的覆盖范围内),进行渲染,否则不渲染 ...
Image+Mask的实现的圆形,点击判断不精确,点击到圆形外的四个边角仍会触发点击,虽然可以通过另外设置eventAlphaThreshold实现像素级判断,但这个方法有天生缺陷,并不是好的选择。 二、应运而生的CircleImage组件# 了解了原有做法的缺陷后,我们希望自制圆形Image组件,解决这些问题,并且尽量简单易用。
4. Mask组件的常用函数 IsRaycastLocationValid:判断指定位置是否在遮罩范围内。 GetModifiedMaterial:获取经过遮罩处理后的材质。 5. 示例代码 示例1:显示部分图片 using UnityEngine; using UnityEngine.UI; public class ImageMaskExample : MonoBehaviour
Unity UI Mask实现原理 Mask的实现思路: 与Image组件配合工作,根据Image的覆盖区域来定位显示范围,所有该Image的子级UI元素,超出此区域的部分会被隐藏(包括UI的交互事件) Mask的实现原理: Mask会赋予Image一个特殊的材质,这个材质会给Image的每个像素点进行标记,将标记结果存放在一个缓存内(这个缓存叫做 Stencil ...
Image和RawImage的基类Graphic有一个属性Raycast Target 。启用此属性后,其图形将成为单击和触摸的目标。当单击或触摸屏幕时,启用了此属性的对象将成为处理的目标,因此尽可能禁用此属性将提高性能 默认情况下启用此属性,但实际上许多图形并不需要启用此属性。另一方面,Unity有一个叫做预置的功能,允许你改变项目的默认值...
2 打开unity3d把制作好的圆形图片“masktest”拖放进去。3 选中图片在右边把“Texture Type”设置为“Sprite(2D and UI)”,然后应用设置。4 现在我们发现图片就变成精灵图片了。5 在场景中“GameObject”--“UI”--“Image”创建一个“Image(mask)”一个“Image”,两个大小位置都是重合的。6 在“Image”下...