源码14:RectMask2D
前面分析MaskGraphic得时候提到了裁剪相关,这里就分析一下裁剪者组件RectMask2D
public class RectMask2D : UIBehaviour, IClipper, ICanvasRaycastFilter
{
[NonSerialized]
private readonly RectangularVertexClipper m_VertexClipper = new RectangularVertexClipper();
private HashSet<IClippable> m_ClipTargets = new HashSet<IClippable>();
...
}
RectMask2D继承了UIBehaviour, IClipper, ICanvasRaycastFilter
IClipper裁剪者 和前面讲的IClippable 是配套使用
ICanvasRaycastFilter 实现过滤接口
维护了一个IClippable类型的列表m_ClipTargets 每次子元素增加,例如一个Image组件的enable、disable。或者RectMask2D自身的状态发生改变,例如一个RectMask2D enable、disable。那么就会更新这个裁剪目标
/// <summary>
/// Add a IClippable to be tracked by the mask.
/// </summary>
/// <param name="clippable">Add the clippable object for this mask</param>
public void AddClippable(IClippable clippable)
{
if (clippable == null)
return;
m_ShouldRecalculateClipRects = true;
MaskableGraphic maskable = clippable as MaskableGraphic;
if (maskable == null)
m_ClipTargets.Add(clippable);
else
m_MaskableTargets.Add(maskable);
m_ForceClip = true;
}
设置m_ShouldRecalculateClipRects为true,把clippable类型的组件添加到m_ClipTargets列表中,设置m_ForceClip为true,这个参数会在PerformClipping被用到
调用时在MaskableGraphic 中:
private void UpdateClipParent()
{
var newParent = (ma

本文解析Unity中的RectMask2D组件,探讨其作为裁剪者如何跟踪和管理IClippable目标,以及PerformClipping方法实现的实时裁剪过程。通过实例讲解了添加/移除目标、状态变化通知和裁剪计算细节。
最低0.47元/天 解锁文章
1445

被折叠的 条评论
为什么被折叠?



