32 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			32 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using UnityEngine; | |||
|  | using UnityEngine.Rendering; | |||
|  | using UnityEngine.UI; | |||
|  | 
 | |||
|  | public class HoleImage : Image | |||
|  | { | |||
|  |     public override 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.NotEqual, ColorWriteMask.All, (1 << m_StencilValue) - 1, 0); | |||
|  |             StencilMaterial.Remove(m_MaskMaterial); | |||
|  |             m_MaskMaterial = maskMat; | |||
|  |             toUse = m_MaskMaterial; | |||
|  |         } | |||
|  |         return toUse; | |||
|  |     } | |||
|  | } |