public UiDialogHandle ShowModalPrefab(GameObject prefab, object param = null, ShowModalOption option = ShowModalOption.BlackCurtain) { _logger.InfoFormat("ShowModalPrefab({0})", prefab.name); var dialogGo = UiHelper.AddChild(_dialogRoot.gameObject, prefab); var dialog = dialogGo.GetComponent <UiDialog>(); return(ShowModalInternal(dialog, true, param, option)); }
public UiDialogHandle ShowModalTemplate(GameObject gameObject, object param = null, ShowModalOption option = ShowModalOption.BlackCurtain) { _logger.InfoFormat("ShowModalTemplate({0})", gameObject.transform.name); var dialogGo = UiHelper.AddChild(_dialogRoot.gameObject, gameObject); dialogGo.SetActive(true); var dialog = dialogGo.GetComponent <UiDialog>(); return(ShowModalInternal(dialog, true, param, option)); }
public UiDialogHandle ShowModal <T>(T dialog, object param = null, ShowModalOption option = ShowModalOption.BlackCurtain) where T : UiDialog { _logger.InfoFormat("ShowModal({0})", dialog.GetType().Name); if (dialog.gameObject.activeSelf) { _logger.InfoFormat("Failed to show modal because already shown"); return(null); } dialog.gameObject.SetActive(true); return(ShowModalInternal(dialog, false, param, option)); }
public UiDialogHandle ShowModalRoot <T>(object param = null, ShowModalOption option = ShowModalOption.BlackCurtain) where T : UiDialog { var dialogGo = FindFromDialogRoot(typeof(T).Name); if (dialogGo == null) { throw new Exception("ShowModalRoot not found: " + typeof(T).Name); } var dialog = dialogGo.GetComponent <T>(); if (dialog == null) { throw new Exception("ShowModalRoot type mismatched: " + typeof(T).Name); } return(ShowModal(dialog, param, option)); }
/// <summary> /// ********显示窗口的实现方法******* /// </summary> /// <param name="dialog">会话框</param> /// <param name="isTemporary"></param> /// <param name="param"></param> /// <param name="option"></param> /// <returns></returns> private UiDialogHandle ShowModalInternal(UiDialog dialog, bool isTemporary, object param, ShowModalOption option) { // create curtain for blocking input ///<summary> ///背景黑罩 ///</summary> RectTransform curtain = null; if ((option & ShowModalOption.BlackCurtain) != 0 && _fadingOutBlackCurtain != null) { // When there is a curtain fading out, reuse it to reduce flickering curtain = _fadingOutBlackCurtain; DOTween.Kill(curtain.GetComponentInChildren <Image>()); _fadingOutBlackCurtain = null; } else { //curtain为对话框弹出后的背景遮罩 改变背景颜色 curtain = CreateCurtain(new Color(0, 0, 0, 0), _dialogRoot); } //SetSiblingIndex->用于设置节点在hierarchy中的层级 如0,1,2,3 //在UI layer中hierarchy中的层级代表了渲染顺序 //渲染层级与父节点统一 SiblingIndex(渲染) curtain.SetSiblingIndex(dialog.GetComponent <RectTransform>().GetSiblingIndex()); //会话框要比背景后渲染 // unnecessary but it works as workaround for setting sibling index dialog.GetComponent <RectTransform>().SetSiblingIndex(curtain.GetSiblingIndex() + 1); if ((option & ShowModalOption.BlackCurtain) != 0) { _blackCurtainCount += 1; var image = curtain.GetComponentInChildren <Image>(); image.DOColor(new Color(0, 0, 0, 0.7f), 0.15f).SetUpdate(true); } // fade in dialog var dialogRt = dialog.GetComponent <RectTransform>(); dialogRt.localScale = Vector3.one * 1.1f; dialogRt.DOScale(Vector3.one, 0.2f).SetEase(Ease.OutCubic).SetUpdate(true); var dialogCg = dialog.GetComponent <CanvasGroup>(); dialogCg.alpha = 0.2f; //渐变 dialogCg.DOFade(1f, 0.2f).SetEase(Ease.OutCubic).SetUpdate(true); // create handle and register to modals var handle = new UiDialogHandle { Dialog = dialog, Visible = true }; _modals.Add(new ModalEntity { Handle = handle, IsTemporary = isTemporary, Curtain = curtain, Option = option }); dialog.OnShow(param); return(handle); }