| | |
| | | }
|
| | |
|
| | | // 打开UI
|
| | | public virtual void HandleOpen()
|
| | | public void HandleOpen()
|
| | | {
|
| | | OnPreOpen();
|
| | | // 如果正在播放动画,先停止
|
| | |
| | | }
|
| | |
|
| | | // 关闭UI - 修改后的方法
|
| | | public virtual void HandleClose()
|
| | | public void HandleClose()
|
| | | {
|
| | | // 如果已经在关闭过程中,直接返回
|
| | | if (isClosing) return;
|
| | |
| | |
|
| | | public virtual void CloseWindow()
|
| | | {
|
| | | UIManager.Instance.CloseWindow(this);
|
| | | UIManager.Instance.CloseWindow(this, false);
|
| | | }
|
| | |
|
| | | // 刷新UI
|
| | |
| | | /// <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>();
|