| | |
| | | [SerializeField] public bool isPersistent = false; |
| | | [SerializeField][HideInInspector] public int maxIdleRounds = 20; |
| | | |
| | | |
| | | // 动画相关 |
| | | [SerializeField] public UIAnimationType openAnimationType = UIAnimationType.None; |
| | | [SerializeField] public UIAnimationType closeAnimationType = UIAnimationType.None; |
| | | [SerializeField] protected RectTransform _rectTransform; //界面默认添加根节点用于表现界面开启关闭动画,或者设置适配用 |
| | | |
| | | [SerializeField]/*[HideInInspector]*/ public float animeDuration = 0.2f; |
| | | [SerializeField]public TweenCurve scaleOverInOutCurve; |
| | |
| | | // 子UI管理 |
| | | [HideInInspector] public List<UIBase> childrenUI = new List<UIBase>(); |
| | | |
| | | [Header("所有UI排版应该在此节点内层")] |
| | | [SerializeField] protected RectTransform _rectTransform; //界面默认添加根节点用于表现界面开启关闭动画,或者设置适配用 |
| | | |
| | | //遮罩组件在界面开发中生成,遮罩开关和点击空白为其中的组件特性 |
| | | // 打开遮罩 |
| | | [Header("遮罩(透明)开关")] |
| | | [SerializeField] public bool openMask = false; |
| | | |
| | | // 默认点击空白区域关闭界面 |
| | | [Header("点击空白关闭")] |
| | | [SerializeField] public bool clickEmptySpaceClose = false; |
| | | |
| | | private GameObject screenMask = null; |
| | | public GameObject screenMask = null; |
| | | |
| | | private Button btnClickEmptyClose; |
| | | public Action btnClickEmptyCloseEvent = null; //提供点击空白区域关闭界面的回调 |
| | |
| | | |
| | | } |
| | | |
| | | ApplySettings(); |
| | | |
| | | if (openMask) |
| | | { |
| | | screenMask = GameObject.Instantiate(Resources.Load<GameObject>("Prefabs/ScreenMask"), transform); |
| | | screenMask.transform.localScale = Vector3.one; |
| | | screenMask.transform.localPosition = Vector3.zero; |
| | | if (screenMask != null)
|
| | | screenMask.transform.SetAsFirstSibling(); |
| | | } |
| | | InitClickEmptySpaceBtn(); |
| | | } |
| | | |
| | | protected virtual void Start() |
| | |
| | | // 子类可以重写此方法进行额外初始化 |
| | | } |
| | | |
| | | protected async UniTask ApplySettings() |
| | | protected async UniTask ApplyClickEmptySpaceClose() |
| | | { |
| | | if (clickEmptySpaceClose) |
| | | { |
| | | //延迟创建会导致层级在ScreenMask之上 |
| | | GameObject goBtnESC = GameObject.Instantiate(Resources.Load<GameObject>("Prefabs/ClickEmptyCloseMask"), transform); |
| | | btnClickEmptyClose = goBtnESC.GetComponent<Button>(); |
| | | btnClickEmptyClose.transform.SetAsFirstSibling(); |
| | | //延迟x帧后可点击,防止点击过快立即关闭了 |
| | | await UniTask.DelayFrame(5); |
| | | btnClickEmptyClose.interactable = true; |
| | | } |
| | | } |
| | | |
| | | private void InitClickEmptySpaceBtn()
|
| | | {
|
| | | if (!clickEmptySpaceClose)
|
| | | {
|
| | | return;
|
| | | }
|
| | | btnClickEmptyClose.AddListener(()=> |
| | | { |
| | | if (btnClickEmptyCloseEvent != null) |
| | |
| | | CloseWindow(); |
| | | } |
| | | }); |
| | | } |
| | |
|
| | | btnClickEmptyClose.interactable = false;
|
| | | } |
| | | |
| | | |
| | |
| | | return; |
| | | } |
| | | |
| | | if ((clickEmptySpaceClose || openMask) && screenMask == null)
|
| | | {
|
| | | Debug.LogError($"界面: {uiName} 缺少遮罩 "); |
| | | return; |
| | | } |
| | | |
| | | OnPreOpen(); |
| | | // 如果正在播放动画,先停止 |
| | | StopCurrentAnimation(); |
| | |
| | | // _rectTransform.offsetMax = new Vector2(0, -50); //上方 |
| | | |
| | | OnOpen(); |
| | | ApplyClickEmptySpaceClose(); |
| | | |
| | | ExecuteNextFrame(NextFrameAfterOpen); |
| | | } |
| | |
| | | // 如果已经在关闭过程中,直接返回 |
| | | if (isClosing) return; |
| | | |
| | | if (clickEmptySpaceClose)
|
| | | btnClickEmptyClose.interactable = false; |
| | | |
| | | OnPreClose(); |
| | | |
| | | // 如果正在播放动画,先停止 |