UnityEngine.UI.MaskUtilities.GetStencilDepth C# (CSharp) Method

GetStencilDepth() public static method

Find the stencil depth for a given element.

public static GetStencilDepth ( Transform transform, Transform stopAfter ) : int
transform UnityEngine.Transform
stopAfter UnityEngine.Transform
return int
        public static int GetStencilDepth(Transform transform, Transform stopAfter)
        {
            int num = 0;
            if (transform != stopAfter)
            {
                Transform parent = transform.parent;
                List<Mask> results = ListPool<Mask>.Get();
                while (parent != null)
                {
                    parent.GetComponents<Mask>(results);
                    for (int i = 0; i < results.Count; i++)
                    {
                        if (((results[i] != null) && results[i].MaskEnabled()) && results[i].graphic.IsActive())
                        {
                            num++;
                            break;
                        }
                    }
                    if (parent == stopAfter)
                    {
                        break;
                    }
                    parent = parent.parent;
                }
                ListPool<Mask>.Release(results);
            }
            return num;
        }

Usage Example

コード例 #1
0
        /// <summary>
        /// See IMaterialModifier.GetModifiedMaterial
        /// </summary>
        public virtual Material GetModifiedMaterial(Material baseMaterial)
        {
            var toUse = baseMaterial;

            if (m_ShouldRecalculateStencil)
            {
                var rootCanvas = MaskUtilities.FindRootSortOverrideCanvas(transform);
                m_StencilValue             = maskable ? MaskUtilities.GetStencilDepth(transform, rootCanvas) : 0;
                m_ShouldRecalculateStencil = false;
            }

            // 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 maskComponent = GetComponent <Mask>();

            if (m_StencilValue > 0 && (maskComponent == null || !maskComponent.IsActive()))
            {
                var maskMat = StencilMaterial.Add(toUse, (1 << m_StencilValue) - 1, StencilOp.Keep,
                                                  CompareFunction.Equal, ColorWriteMask.All, (1 << m_StencilValue) - 1, 0);
                StencilMaterial.Remove(m_MaskMaterial);
                m_MaskMaterial = maskMat;
                toUse          = m_MaskMaterial;
            }

            return(toUse);
        }
All Usage Examples Of UnityEngine.UI.MaskUtilities::GetStencilDepth