源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.4 KiB

  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using System.Collections;
  4. using UnityEngine.Rendering;
  5. using System;
  6. using UnityEngine.Serialization;
  7. public class EffectMask : Mask {
  8. [NonSerialized]
  9. private Material c_MaskMaterial;
  10. [NonSerialized]
  11. private Material c_UnmaskMaterial;
  12. protected override void OnDisable()
  13. {
  14. // we call base OnDisable first here
  15. // as we need to have the IsActive return the
  16. // correct value when we notify the children
  17. // that the mask state has changed.
  18. base.OnDisable();
  19. if (graphic != null)
  20. {
  21. graphic.SetMaterialDirty();
  22. graphic.canvasRenderer.hasPopInstruction = false;
  23. graphic.canvasRenderer.popMaterialCount = 0;
  24. }
  25. StencilMaterial.Remove(c_MaskMaterial);
  26. c_MaskMaterial = null;
  27. StencilMaterial.Remove(c_UnmaskMaterial);
  28. c_UnmaskMaterial = null;
  29. MaskUtilities.NotifyStencilStateChanged(this);
  30. }
  31. public override Material GetModifiedMaterial(Material baseMaterial)
  32. {
  33. if (!MaskEnabled())
  34. return baseMaterial;
  35. var maskMaterial = StencilMaterial.Add(baseMaterial, 1, StencilOp.Replace, CompareFunction.Always, showMaskGraphic ? ColorWriteMask.All : 0);
  36. StencilMaterial.Remove(c_MaskMaterial);
  37. c_MaskMaterial = maskMaterial;
  38. return c_MaskMaterial;
  39. }
  40. }