/*** * * Title: "SUIFW" UI框架项目 * 主题: UI遮罩管理器 * Description: * 功能: 负责“弹出窗体”的模态实现。 * (即:不允许穿透) * Date: 2017 * Version: 0.1版本 * Modify Recoder: * * */ using UnityEngine; using UnityEngine.UI; using System; using System.Collections.Generic; namespace SUIFW { public class UIMaskMgr : MonoBehaviour { /* 字段 */ //本脚本私有单例实例 private static UIMaskMgr _Instance; //UI根节点对象 private GameObject _GoCanvasRoot = null; //UI脚本节点(加载各种管理脚本的节点) private Transform _CanTransformUIScripts = null; //顶层面板 private GameObject _GoTopPlane; //遮罩面板 private GameObject _GoMaskPlane; //UI摄像机 public Camera _UICamear; //原始UI摄像机的层深 private float _OriginalUICameraDepth; /// /// 得到实例(单例) /// /// public static UIMaskMgr GetInstance() { if (_Instance == null) { _Instance = new GameObject("_UIMaskMgr").AddComponent(); } return _Instance; } void Awake() { //得到UI根节点、UI脚本节点 _GoCanvasRoot = GameObject.FindGameObjectWithTag(SysDefine.SYS_TAG_CANVAS); _CanTransformUIScripts = UnityHelper.FindTheChild(_GoCanvasRoot, SysDefine.SYS_CANVAS_UISCRIPTS_NODE_NAME); //把本脚本实例,作为Canvas的子节点 UnityHelper.AddChildToParent(_CanTransformUIScripts, this.gameObject.transform); //得到“顶层面板”与“遮罩面板” _GoTopPlane = _GoCanvasRoot; _GoMaskPlane = UnityHelper.FindTheChild(_GoCanvasRoot.gameObject, SysDefine.SYS_CANVAS_UIMASKPANELS_NODE_NAME).gameObject; //得到UI摄像机的原始“层深” _UICamear = GameObject.FindGameObjectWithTag(SysDefine.SYS_TAG_UICAMERA).GetComponent(); if (_UICamear != null) { _OriginalUICameraDepth = _UICamear.depth; } else { Log.Write(GetType() + "/Start()/_UICamera is Null ,please Check!"); } } /// /// 设置遮罩状态 /// /// 需要显示的窗体 public void SetMaskWindow(GameObject goDisplayPlane, UIFormsLucencyType UILucencyType = UIFormsLucencyType.Impenetrable) { //顶层窗体下移。 _GoTopPlane.transform.SetAsLastSibling(); //启用遮罩窗体与透明度 switch (UILucencyType) { case UIFormsLucencyType.Lucency: _GoMaskPlane.SetActive(true); Color newColor1 = new Color(SysDefine.SYS_UIMASK_LUCENCY_COLOR_RGB, SysDefine.SYS_UIMASK_LUCENCY_COLOR_RGB, SysDefine.SYS_UIMASK_LUCENCY_COLOR_RGB, SysDefine.SYS_UIMASK_LUCENCY_COLOR_A); _GoMaskPlane.GetComponent().color = newColor1; break; case UIFormsLucencyType.Translucence: _GoMaskPlane.SetActive(true); Color newColor2 = new Color(SysDefine.SYS_UIMASK_TRANSLUCENCY_COLOR_RGB, SysDefine.SYS_UIMASK_TRANSLUCENCY_COLOR_RGB, SysDefine.SYS_UIMASK_TRANSLUCENCY_COLOR_RGB, SysDefine.SYS_UIMASK_TRANSLUCENCY_COLOR_A); _GoMaskPlane.GetComponent().color = newColor2; break; case UIFormsLucencyType.Impenetrable: _GoMaskPlane.SetActive(true); Color newColor3 = new Color(SysDefine.SYS_UIMASK_IMPENETRABLE_COLOR_RGB, SysDefine.SYS_UIMASK_IMPENETRABLE_COLOR_RGB, SysDefine.SYS_UIMASK_IMPENETRABLE_COLOR_RGB, SysDefine.SYS_UIMASK_IMPENETRABLE_COLOR_A); _GoMaskPlane.GetComponent().color = newColor3; break; case UIFormsLucencyType.Penetrate: if (_GoMaskPlane.activeInHierarchy) { _GoMaskPlane.SetActive(false); } break; default: break; } //遮罩窗体下移 _GoMaskPlane.transform.SetAsLastSibling(); //显示窗体下移 goDisplayPlane.transform.SetAsLastSibling(); //增加当前UI摄像机的“层深” if (_UICamear != null) { _UICamear.depth = _UICamear.depth + SysDefine.SYS_UICAMERA_DEPTH_INCREMENT; } } /// /// 取消遮罩窗体 /// public void CancleMaskWindow() { //顶层窗体上移 _GoTopPlane.transform.SetAsFirstSibling(); //禁用遮罩窗体 if (_GoMaskPlane.activeInHierarchy) { _GoMaskPlane.SetActive(false); } //回复UI摄像机的原来的“层深” _UICamear.depth = _OriginalUICameraDepth; } public void ShowMask(UIFormsLucencyType UILucencyType = UIFormsLucencyType.Lucency) { switch (UILucencyType) { case UIFormsLucencyType.Lucency: _GoMaskPlane.SetActive(true); Color newColor1 = new Color(SysDefine.SYS_UIMASK_LUCENCY_COLOR_RGB, SysDefine.SYS_UIMASK_LUCENCY_COLOR_RGB, SysDefine.SYS_UIMASK_LUCENCY_COLOR_RGB, SysDefine.SYS_UIMASK_LUCENCY_COLOR_A); _GoMaskPlane.GetComponent().color = newColor1; break; case UIFormsLucencyType.Translucence: _GoMaskPlane.SetActive(true); Color newColor2 = new Color(SysDefine.SYS_UIMASK_TRANSLUCENCY_COLOR_RGB, SysDefine.SYS_UIMASK_TRANSLUCENCY_COLOR_RGB, SysDefine.SYS_UIMASK_TRANSLUCENCY_COLOR_RGB, SysDefine.SYS_UIMASK_TRANSLUCENCY_COLOR_A); _GoMaskPlane.GetComponent().color = newColor2; break; case UIFormsLucencyType.Impenetrable: _GoMaskPlane.SetActive(true); Color newColor3 = new Color(SysDefine.SYS_UIMASK_IMPENETRABLE_COLOR_RGB, SysDefine.SYS_UIMASK_IMPENETRABLE_COLOR_RGB, SysDefine.SYS_UIMASK_IMPENETRABLE_COLOR_RGB, SysDefine.SYS_UIMASK_IMPENETRABLE_COLOR_A); _GoMaskPlane.GetComponent().color = newColor3; break; case UIFormsLucencyType.Penetrate: if (_GoMaskPlane.activeInHierarchy) { _GoMaskPlane.SetActive(false); } break; default: break; } } public void HideMask() { _GoMaskPlane.SetActive(false); } }//Class_end }