UIGU源码分析14:RectMask2D

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

源码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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值