using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using Snxxz.UI; [DisallowMultipleComponent] [RequireComponent(typeof(Canvas))] public class CanvasAddition : MonoBehaviour { [SerializeField] Canvas m_Canvas; public Canvas canvas { get { return this.m_Canvas ?? (this.m_Canvas = this.GetComponent()); } } [SerializeField] CullingFullScreenType m_Culling = CullingFullScreenType.None; Material m_SpriteGrayMaterial; public Material spriteGrayMaterial { get { return this.m_SpriteGrayMaterial ?? (this.m_SpriteGrayMaterial = MaterialUtility.GetInstantiatedSpriteGrayMaterial()); } } private void Awake() { m_Canvas = this.GetComponent(); WindowCenter.Instance.windowAfterOpenEvent += OnWindowOpen; WindowCenter.Instance.windowAfterCloseEvent += OnWindowClose; } private void OnDestroy() { WindowCenter.Instance.windowAfterOpenEvent -= OnWindowOpen; WindowCenter.Instance.windowAfterCloseEvent -= OnWindowClose; } private void OnWindowOpen(Window _window) { var culling = false; switch (m_Culling) { case CullingFullScreenType.None: culling = false; break; case CullingFullScreenType.Any: culling = WindowCenter.Instance.ExistAnyFullScreenOrMaskWin(); break; default: culling = WindowCenter.Instance.ExistAnyFullScreenOrMaskWinLEqual((WindowType)m_Culling); break; } canvas.gameObject.SetLayer(culling ? LayerUtility.DevisableUI : LayerUtility.UILayer, false); } private void OnWindowClose(Window _window) { var culling = false; switch (m_Culling) { case CullingFullScreenType.None: culling = false; break; case CullingFullScreenType.Any: culling = WindowCenter.Instance.ExistAnyFullScreenOrMaskWin(); break; default: culling = WindowCenter.Instance.ExistAnyFullScreenOrMaskWinLEqual((WindowType)m_Culling); break; } canvas.gameObject.SetLayer(culling ? LayerUtility.DevisableUI : LayerUtility.UILayer, false); } private void Start() { var canvasScaler = this.GetComponent(); if (canvasScaler != null && canvasScaler.screenMatchMode == CanvasScaler.ScreenMatchMode.MatchWidthOrHeight) { var screenAspect = Screen.width / (float)Screen.height; var referenceAspect = canvasScaler.referenceResolution.x / (float)canvasScaler.referenceResolution.y; if ((screenAspect - referenceAspect) > 0.0001f) { canvasScaler.matchWidthOrHeight = 1f; } else { canvasScaler.matchWidthOrHeight = 0f; } } } public enum CullingFullScreenType { Base = 0, Normal = 1, Modal = 2, Tip = 3, System = 4, Loading = 5, None = 6, Any = 7, } }