Main/UI/UIBase.cs
@@ -209,7 +209,7 @@
    }
    // 打开UI
    public virtual void HandleOpen()
    public void HandleOpen()
    {
        OnPreOpen();
        // 如果正在播放动画,先停止
@@ -228,7 +228,7 @@
    }
    // 关闭UI - 修改后的方法
    public virtual void HandleClose()
    public void HandleClose()
    {
        // 如果已经在关闭过程中,直接返回
        if (isClosing) return;
@@ -272,7 +272,7 @@
    public virtual void CloseWindow()
    {
        UIManager.Instance.CloseWindow(this);
        UIManager.Instance.CloseWindow(this, false);
    }
    // 刷新UI
@@ -309,22 +309,29 @@
    /// <param name="autoDestroy">是否自动销毁,默认为true</param>
    /// <param name="destroyDelay">自动销毁延迟时间,默认为5秒</param>
    /// <returns>特效游戏对象</returns>
    public async UniTask<GameObject> PlayUIEffect(string effectName, Transform parent = null, bool autoDestroy = true, float destroyDelay = 5f)
    public async UniTask<GameObject> PlayUIEffect(int id, Transform parent = null, bool autoDestroy = true, float destroyDelay = 5f)
    {
        // 使用默认值
        if (parent == null) parent = transform;
        
        EffectConfig effectCfg = EffectConfig.Get(id);
        if (null == effectCfg)
        {
            return null;
        }
        // 加载特效资源
        GameObject effectPrefab = ResManager.Instance.LoadAsset<GameObject>("UIEffect", effectName);
        var effectPrefab = ResManager.Instance.LoadAsset<GameObject>("UIEffect/" + effectCfg.packageName, effectCfg.fxName);
        if (effectPrefab == null)
        {
            Debug.LogError($"加载UI特效失败: {effectName}");
            Debug.LogError($"加载UI特效失败: {effectCfg.packageName}");
            return null;
        }
        
        // 实例化特效
        GameObject effectObj = Instantiate(effectPrefab, parent);
        effectObj.name = $"Effect_{effectName}";
        effectObj.name = $"Effect_{effectCfg.packageName}";
        
        // 添加特效穿透阻挡器
        EffectPenetrationBlocker blocker = effectObj.AddComponent<EffectPenetrationBlocker>();