yyl
2025-06-12 5ca88372febc0ebab5cbdb5f922c59a646b8fb94
Main/System/UIBase/UIBase.cs
@@ -24,7 +24,9 @@
    SlideFromTop, // 从顶部滑入
    SlideFromBottom, // 从底部滑入
    SlideFromLeft, // 从左侧滑入
    SlideFromRight // 从右侧滑入
    SlideFromRight, // 从右侧滑入
    ScaleOverInOut,// 缩放(超过)之后再返回
}
[RequireComponent(typeof(Canvas))]
@@ -47,6 +49,8 @@
    // 动画相关
    [SerializeField] public UIAnimationType openAnimationType = UIAnimationType.None;
    [SerializeField] public UIAnimationType closeAnimationType = UIAnimationType.None;
    [SerializeField] protected RectTransform _rectTransform; //界面默认添加根节点用于表现界面开启关闭动画
    [SerializeField]/*[HideInInspector]*/ public float animeDuration = 0.2f;
    [SerializeField][HideInInspector] public Ease animationEase = Ease.OutQuad; // 确保使用 DG.Tweening.Ease
@@ -69,7 +73,13 @@
    private Button btnClickEmptyClose;
    protected int functionOrder = 0;
    //  跟OneLevelWin联动 实际上是需要继承自OneLevelWin才能生效的值 使用需要注意
    int m_FunctionOrder = 0;
    public int functionOrder
    {
        get { return m_FunctionOrder; }
        set { m_FunctionOrder = value; }
    }
    // 内部状态
    protected bool isActive = false;
@@ -79,7 +89,6 @@
    // 组件引用
    protected Canvas canvas;
    protected CanvasGroup canvasGroup;
    protected RectTransform _rectTransform; //界面默认添加根节点用于表现界面开启关闭动画
    // 动画相关
    protected Vector3 originalPosition;
@@ -93,7 +102,6 @@
    protected virtual void Awake()
    {
        CreateRootNode();
        //  防止有人不写base.InitComponent引发错误 所以拆分
        InitComponentInternal();
        // 在Awake中进行基本初始化
@@ -116,42 +124,13 @@
        }
    }
    private void CreateRootNode()
    {
        if (openAnimationType == UIAnimationType.None && closeAnimationType == UIAnimationType.None)
            return;
        List<Transform> children = new List<Transform>();
        foreach (Transform child in transform)
        {
            children.Add(child);
        }
        rootNode = new GameObject("WindowRoot");
        rootNode.transform.SetParent(transform, false);
        rootNode.layer = LayerMask.NameToLayer("UI");
        _rectTransform = rootNode.AddMissingComponent<RectTransform>();
        //设置成拉伸效果,和父容器保持同样大小自动适配
        _rectTransform.anchorMin = Vector2.zero;
        _rectTransform.anchorMax = Vector2.one;
        _rectTransform.pivot = new Vector2(0.5f, 0.5f);
        _rectTransform.anchoredPosition = Vector2.zero;
        _rectTransform.sizeDelta = Vector2.zero; // 设置为0,表示拉伸到父容器大小
        foreach (Transform child in children)
        {
            child.SetParent(rootNode.transform, false);
        }
    }
    protected virtual void Start()
    {
        // 子类可以重写此方法进行额外初始化
    }
    protected async UniTask ApplySettings()
    {
    {
        if (clickEmptySpaceClose)
        {
            //延迟创建会导致层级在ScreenMask之上
@@ -159,9 +138,9 @@
            btnClickEmptyClose = goBtnESC.GetComponent<Button>();
            btnClickEmptyClose.AddListener(CloseWindow);
            btnClickEmptyClose.transform.SetAsFirstSibling();
            await UniTask.DelayFrame(5);
            btnClickEmptyClose = goBtnESC.GetComponent<Button>();
            await UniTask.DelayFrame(5);
            btnClickEmptyClose = goBtnESC.GetComponent<Button>();
            btnClickEmptyClose.AddListener(CloseWindow);
        }
    }
@@ -259,6 +238,13 @@
        PlayOpenAnimation();
        OnOpen();
        ExecuteNextFrame(NextFrameAfterOpen);
    }
    protected virtual void NextFrameAfterOpen()
    {
    }
    // 关闭UI - 修改后的方法
@@ -279,7 +265,6 @@
        // 禁用交互但保持可见
        if (canvasGroup != null)
        {
            canvasGroup.interactable = false;
            canvasGroup.blocksRaycasts = false;
        }
@@ -528,7 +513,6 @@
                if (canvasGroup != null)
                {
                    canvasGroup.alpha = 0f;
                    canvasGroup.interactable = false;
                    canvasGroup.blocksRaycasts = false;
                }
                if (canvasScaler != null)
@@ -541,7 +525,6 @@
                if (canvasGroup != null)
                {
                    canvasGroup.alpha = 1f;
                    canvasGroup.interactable = false;
                    canvasGroup.blocksRaycasts = false;
                }
                if (canvasScaler != null)
@@ -634,11 +617,12 @@
                // 启用交互
                if (canvasGroup != null)
                {
                    canvasGroup.interactable = true;
                    canvasGroup.blocksRaycasts = true;
                }
            });
            // currentAnimation.ingoreTimeScale = true;
            currentAnimation.Play();
        }
@@ -650,7 +634,6 @@
            if (canvasGroup != null)
            {
                canvasGroup.alpha = 1f;
                canvasGroup.interactable = true;
                canvasGroup.blocksRaycasts = true;
            }
            isAnimating = false;
@@ -667,7 +650,6 @@
        if (canvasGroup != null)
        {
            canvasGroup.alpha = 1f;
            canvasGroup.interactable = true;
            canvasGroup.blocksRaycasts = true;
        }
        if (canvasScaler != null)