From 5f3093f4be480c9d37ea98b41ab7d730ed009208 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期五, 27 六月 2025 15:08:23 +0800
Subject: [PATCH] merge
---
Main/System/UIBase/UIBase.cs | 163 ++++++++++--------------------------------------------
1 files changed, 30 insertions(+), 133 deletions(-)
diff --git a/Main/System/UIBase/UIBase.cs b/Main/System/UIBase/UIBase.cs
index a6bc9d2..e30a84c 100644
--- a/Main/System/UIBase/UIBase.cs
+++ b/Main/System/UIBase/UIBase.cs
@@ -40,7 +40,14 @@
[SerializeField] public UILayer uiLayer = UILayer.Mid;
[SerializeField][HideInInspector] public string uiName;
[SerializeField] public bool isMainUI = false;
- [SerializeField] public bool supportParentChildRelation = true; // 鏂板锛氭槸鍚︽敮鎸佺埗瀛愬叧绯�
+
+ // 鏂板锛氭槸鍚︽敮鎸佺埗瀛愬叧绯�
+ // 鐖跺瓙鍏崇郴:UI鎷ユ湁鐨勪笂涓嬬骇閾惧紡鍏崇郴
+ // 鍦ㄩ潪鐗瑰畾鎯呭喌涓� 閮借鎷ユ湁鐖跺瓙鍏崇郴 锛堜竴鑸潵璇村姛鑳介兘瑕佹湁鐖跺瓙鍏崇郴 渚嬪鐨勬槸渚嬪绯荤粺寮圭獥
+ // 涓荤晫闈㈣繖绉嶄笉闇�瑕� 鍦ㄥ埗浣淯I浼� 鐩墠鐨勯渶姹傛槸 鍔熻兘鍏ㄩ儴鍋氬湪Middle灞傦級
+ // 鎷ユ湁鐖跺瓙鍏崇郴 鍦ㄥ叧闂埗鐣岄潰鐨勬椂鍊� 瀛愮晫闈細杩炲悓涓�璧峰叧闂� 瀛愮晫闈㈡墦寮�鏃� 鐖剁晫闈㈢殑鈥滃洖鍚堟暟鈥濅細鍒锋柊 鍥炲悎鏁拌瑙佹寔涔呭寲鐩稿叧鐨勬敞閲�
+ //
+ [SerializeField] public bool supportParentChildRelation = true;
// 鎸佷箙鍖栫浉鍏�
[SerializeField] public bool isPersistent = false;
@@ -52,6 +59,7 @@
[SerializeField] protected RectTransform _rectTransform; //鐣岄潰榛樿娣诲姞鏍硅妭鐐圭敤浜庤〃鐜扮晫闈㈠紑鍚叧闂姩鐢�
[SerializeField]/*[HideInInspector]*/ public float animeDuration = 0.2f;
+ [SerializeField]public TweenCurve scaleOverInOutCurve;
[SerializeField][HideInInspector] public Ease animationEase = Ease.OutQuad; // 纭繚浣跨敤 DG.Tweening.Ease
// 杩愯鏃剁姸鎬�
@@ -328,143 +336,21 @@
/// <param name="autoDestroy">鏄惁鑷姩閿�姣侊紝榛樿涓簍rue</param>
/// <param name="destroyDelay">鑷姩閿�姣佸欢杩熸椂闂达紝榛樿涓�5绉�</param>
/// <returns>鐗规晥娓告垙瀵硅薄</returns>
- public GameObject PlayUIEffect(int id, Transform parent = null, bool autoDestroy = true, float destroyDelay = 5f)
+ public EffectPlayer PlayUIEffect(int id, Transform parent = null, bool autoDestroy = true, float destroyDelay = 5f)
{
// 浣跨敤榛樿鍊�
if (parent == null) parent = transform;
- EffectConfig effectCfg = EffectConfig.Get(id);
+ EffectPlayer player = parent.gameObject.AddComponent<EffectPlayer>();
- if (null == effectCfg)
- {
- return null;
- }
+ player.effectId = id;
+ player.autoDestroy = autoDestroy;
+ player.destroyDelay = destroyDelay;
+ player.canvas = canvas;
- // 鍔犺浇鐗规晥璧勬簮
- var effectPrefab = ResManager.Instance.LoadAsset<GameObject>("UIEffect/" + effectCfg.packageName, effectCfg.fxName);
- if (effectPrefab == null)
- {
- Debug.LogError($"鍔犺浇UI鐗规晥澶辫触: {effectCfg.packageName}");
- return null;
- }
-
- // 瀹炰緥鍖栫壒鏁�
- GameObject effectObj = Instantiate(effectPrefab, parent);
- effectObj.name = $"Effect_{effectCfg.packageName}";
-
- // 娣诲姞鐗规晥绌块�忛樆鎸″櫒
- EffectPenetrationBlocker blocker = effectObj.AddComponent<EffectPenetrationBlocker>();
- blocker.parentCanvas = canvas;
-
- // 寤惰繜涓�甯ф墠鐢熸晥
- this.DelayFrame(blocker.UpdateSortingOrder);
-
- // blocker.UpdateSortingOrder();
-
- // 鑷姩閿�姣�
- if (autoDestroy)
- {
- Destroy(effectObj, destroyDelay);
- }
-
- return effectObj;
+ return player;
}
- /// <summary>
- /// 鍦ㄤ袱涓猆I鍏冪礌涔嬮棿鎾斁鐗规晥锛堟寜鐓ortingOrder鐨勪腑闂村�硷級
- /// </summary>
- /// <param name="effectName">鐗规晥璧勬簮鍚嶇О</param>
- /// <param name="frontElement">鍓嶆櫙UI鍏冪礌锛圛mage鎴朢awImage锛�</param>
- /// <param name="backElement">鑳屾櫙UI鍏冪礌锛圛mage鎴朢awImage锛�</param>
- /// <param name="autoDestroy">鏄惁鑷姩閿�姣侊紝榛樿涓簍rue</param>
- /// <param name="destroyDelay">鑷姩閿�姣佸欢杩熸椂闂达紝榛樿涓�5绉�</param>
- /// <returns>鐗规晥娓告垙瀵硅薄</returns>
- public async UniTask<GameObject> PlayEffectBetweenUIElements(string effectName, Graphic frontElement, Graphic backElement, bool autoDestroy = true, float destroyDelay = 5f)
- {
- if (frontElement == null || backElement == null)
- {
- Debug.LogError("鍓嶆櫙鎴栬儗鏅疷I鍏冪礌涓虹┖");
- return null;
- }
-
- // 纭繚UI鍏冪礌鍦ㄥ綋鍓峌IBase鐨凜anvas涓�
- if (frontElement.canvas != canvas || backElement.canvas != canvas)
- {
- Debug.LogError("UI鍏冪礌涓嶅湪褰撳墠UIBase鐨凜anvas涓�");
- return null;
- }
-
- // 鍔犺浇鐗规晥璧勬簮
- GameObject effectPrefab = ResManager.Instance.LoadAsset<GameObject>("UIEffect", effectName);
- if (effectPrefab == null)
- {
- Debug.LogError($"鍔犺浇UI鐗规晥澶辫触: {effectName}");
- return null;
- }
-
- // 鍒涘缓涓�涓柊鐨凣ameObject浣滀负鐗规晥瀹瑰櫒
- GameObject container = new GameObject($"EffectContainer_{effectName}");
- container.transform.SetParent(transform, false);
-
- // 璁剧疆瀹瑰櫒浣嶇疆
- RectTransform containerRect = container.AddComponent<RectTransform>();
- containerRect.anchorMin = new Vector2(0.5f, 0.5f);
- containerRect.anchorMax = new Vector2(0.5f, 0.5f);
- containerRect.pivot = new Vector2(0.5f, 0.5f);
- containerRect.anchoredPosition = Vector2.zero;
- containerRect.sizeDelta = new Vector2(100, 100); // 榛樿澶у皬锛屽彲浠ユ牴鎹渶瑕佽皟鏁�
-
- // 鑾峰彇鍓嶆櫙鍜岃儗鏅厓绱犵殑siblingIndex
- int frontIndex = frontElement.transform.GetSiblingIndex();
- int backIndex = backElement.transform.GetSiblingIndex();
-
- // 璁剧疆鐗规晥瀹瑰櫒鐨剆iblingIndex鍦ㄤ袱鑰呬箣闂�
- if (frontIndex > backIndex)
- {
- // 鍓嶆櫙鍦ㄨ儗鏅箣鍚庯紝鐗规晥搴旇鍦ㄤ腑闂�
- container.transform.SetSiblingIndex((frontIndex + backIndex) / 2 + 1);
- }
- else
- {
- // 鑳屾櫙鍦ㄥ墠鏅箣鍚庯紝鐗规晥搴旇鍦ㄤ腑闂�
- container.transform.SetSiblingIndex((frontIndex + backIndex) / 2);
- }
-
- // 瀹炰緥鍖栫壒鏁�
- GameObject effectObj = Instantiate(effectPrefab, container.transform);
- effectObj.name = $"Effect_{effectName}";
-
- // 娣诲姞鐗规晥绌块�忛樆鎸″櫒
- EffectPenetrationBlocker blocker = effectObj.AddComponent<EffectPenetrationBlocker>();
-
- // 鐩存帴璁剧疆鐗规晥娓叉煋鍣ㄧ殑鎺掑簭椤哄簭
- Renderer[] renderers = effectObj.GetComponentsInChildren<Renderer>(true);
- foreach (Renderer renderer in renderers)
- {
- renderer.sortingOrder = canvas.sortingOrder;
- renderer.sortingLayerName = canvas.sortingLayerName;
- }
-
- // 璁剧疆绮掑瓙绯荤粺娓叉煋鍣ㄧ殑鎺掑簭椤哄簭
- ParticleSystem[] particleSystems = effectObj.GetComponentsInChildren<ParticleSystem>(true);
- foreach (ParticleSystem ps in particleSystems)
- {
- ParticleSystemRenderer psRenderer = ps.GetComponent<ParticleSystemRenderer>();
- if (psRenderer != null)
- {
- psRenderer.sortingOrder = canvas.sortingOrder;
- psRenderer.sortingLayerName = canvas.sortingLayerName;
- }
- }
-
- // 鑷姩閿�姣�
- if (autoDestroy)
- {
- Destroy(container, destroyDelay);
- }
-
- return effectObj;
- }
#endregion
public bool raycastTarget
@@ -619,8 +505,19 @@
case UIAnimationType.ScaleOverInOut:
if (_rectTransform != null)
{
- currentAnimation.Append(DOVirtual.Float(0.3f, 1.2f, animeDuration, (value) => {canvasScaler.scaleFactor = value;}).SetEase(animationEase));
- currentAnimation.Append(DOVirtual.Float(1.2f, 1f, 0.1f, (value) => {canvasScaler.scaleFactor = value;}).SetEase(animationEase));
+ if (null == scaleOverInOutCurve)
+ {
+ currentAnimation.Append(DOVirtual.Float(0.3f, 1.2f, animeDuration,
+ (value) => {canvasScaler.scaleFactor = value;}).SetEase(animationEase));
+ }
+ else
+ {
+ currentAnimation.Append(DOVirtual.Float(0.3f, 1.2f, animeDuration,
+ (value) => {canvasScaler.scaleFactor = value;}).SetEase(scaleOverInOutCurve.curve));
+ }
+
+
+ // currentAnimation.Append(DOVirtual.Float(1.2f, 1f, 0.1f, (value) => {canvasScaler.scaleFactor = value;}).SetEase(scaleOverInOutCurve));
}
break;
}
@@ -629,7 +526,7 @@
currentAnimation.OnComplete(() =>
{
isAnimating = false;
-
+ _ResetToBegin();
OnOpenAnimationComplete();
// 鍚敤浜や簰
--
Gitblit v1.8.0