using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.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(); UIManager.Instance.OnOpenWindow += OnWindowOpen; UIManager.Instance.OnCloseWindow += OnWindowClose; } private void OnDestroy() { UIManager.Instance.OnOpenWindow -= OnWindowOpen; UIManager.Instance.OnCloseWindow -= OnWindowClose; } private void OnWindowOpen(UIBase _window) { var culling = false; switch (m_Culling) { case CullingFullScreenType.None: culling = false; break; // TODO YYL // case CullingFullScreenType.Any: // culling = UIManager.Instance.ExistAnyFullScreenOrMaskWin(); // break; // default: // culling = UIManager.Instance.ExistAnyFullScreenOrMaskWinLEqual((WindowType)m_Culling); // break; default: break; } canvas.gameObject.SetLayer(culling ? LayerUtility.DevisableUI : LayerUtility.UILayer, false); } private void OnWindowClose(UIBase _window) { var culling = false; switch (m_Culling) { case CullingFullScreenType.None: culling = false; break; // TODO YYL // case CullingFullScreenType.Any: // culling = WindowCenter.Instance.ExistAnyFullScreenOrMaskWin(); // break; // default: // culling = WindowCenter.Instance.ExistAnyFullScreenOrMaskWinLEqual((WindowType)m_Culling); // break; default: 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, } }