From b0a5d4688f1af73b5ad03ccc2df11c9aac1523a9 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期二, 29 七月 2025 16:56:23 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts
---
Main/System/UIBase/UIBase.cs | 232 +++++++++++++++++----------------------------------------
1 files changed, 71 insertions(+), 161 deletions(-)
diff --git a/Main/System/UIBase/UIBase.cs b/Main/System/UIBase/UIBase.cs
index a6bc9d2..02d2031 100644
--- a/Main/System/UIBase/UIBase.cs
+++ b/Main/System/UIBase/UIBase.cs
@@ -9,9 +9,9 @@
public enum UILayer
{
Static, // 闈欐�乁I 閫傚悎鍋� 鎴樻枟 涓荤晫闈�
- Bottom, // 涓荤晫闈�
- Mid, // 鍔熻兘绐楀彛
- System, // 缃戠粶寮圭獥/鍏朵粬閲嶈寮圭獥
+ Bottom, // 閮ㄥ垎鐣岄潰鐗规畩澶勭悊灞傜骇鐢�
+ Mid, // 澶ч儴鍒嗗姛鑳界獥鍙i兘鏀捐繖灞傦紝渚夸簬璺宠浆涓婁笅灞傜鐞嗭紙涓�涓晫闈㈠彲浠ュ悓鏃跺瓨鍦ㄥ涓級
+ System, // 缃戠粶寮圭獥锛屼俊鎭彁绀虹瓑锛屽叾浠栭噸瑕佸脊绐�
Loading, // 鍔犺浇鐣岄潰
}
@@ -25,7 +25,7 @@
SlideFromBottom, // 浠庡簳閮ㄦ粦鍏�
SlideFromLeft, // 浠庡乏渚ф粦鍏�
SlideFromRight, // 浠庡彸渚ф粦鍏�
- ScaleOverInOut,// 缂╂斁锛堣秴杩囷級涔嬪悗鍐嶈繑鍥�
+ ScaleOverInOut,// 缂╂斁鏍规嵁鏇茬嚎
}
@@ -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;
@@ -49,16 +56,15 @@
// 鍔ㄧ敾鐩稿叧
[SerializeField] public UIAnimationType openAnimationType = UIAnimationType.None;
[SerializeField] public UIAnimationType closeAnimationType = UIAnimationType.None;
- [SerializeField] protected RectTransform _rectTransform; //鐣岄潰榛樿娣诲姞鏍硅妭鐐圭敤浜庤〃鐜扮晫闈㈠紑鍚叧闂姩鐢�
+ [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
// 杩愯鏃剁姸鎬�
[HideInInspector] public int lastUsedRound = 0;
[HideInInspector] public UIBase parentUI;
-
- [HideInInspector] public GameObject rootNode; // 鏍硅妭鐐�
// 瀛怳I绠$悊
[HideInInspector] public List<UIBase> childrenUI = new List<UIBase>();
@@ -66,12 +72,13 @@
// 鎵撳紑閬僵
[SerializeField] public bool openMask = false;
- // 鐐瑰嚮绌虹櫧鍖哄煙鍏抽棴鐣岄潰
+ // 榛樿鐐瑰嚮绌虹櫧鍖哄煙鍏抽棴鐣岄潰
[SerializeField] public bool clickEmptySpaceClose = false;
private GameObject screenMask = null;
private Button btnClickEmptyClose;
+ public Action btnClickEmptyCloseEvent = null; //鎻愪緵鐐瑰嚮绌虹櫧鍖哄煙鍏抽棴鐣岄潰鐨勫洖璋�
// 璺烵neLevelWin鑱斿姩 瀹為檯涓婃槸闇�瑕佺户鎵胯嚜OneLevelWin鎵嶈兘鐢熸晥鐨勫�� 浣跨敤闇�瑕佹敞鎰�
int m_FunctionOrder = 0;
@@ -110,7 +117,8 @@
// 淇濆瓨鍘熷鍊肩敤浜庡姩鐢�
if (_rectTransform != null)
{
- originalPosition = _rectTransform.anchoredPosition;
+ originalPosition = _rectTransform.anchoredPosition;;
+
}
ApplySettings();
@@ -136,12 +144,20 @@
//寤惰繜鍒涘缓浼氬鑷村眰绾у湪ScreenMask涔嬩笂
GameObject goBtnESC = GameObject.Instantiate(Resources.Load<GameObject>("Prefabs/ClickEmptyCloseMask"), transform);
btnClickEmptyClose = goBtnESC.GetComponent<Button>();
- btnClickEmptyClose.AddListener(CloseWindow);
btnClickEmptyClose.transform.SetAsFirstSibling();
await UniTask.DelayFrame(5);
- btnClickEmptyClose = goBtnESC.GetComponent<Button>();
- btnClickEmptyClose.AddListener(CloseWindow);
+ btnClickEmptyClose.AddListener(()=>
+ {
+ if (btnClickEmptyCloseEvent != null)
+ {
+ btnClickEmptyCloseEvent();
+ }
+ else
+ {
+ CloseWindow();
+ }
+ });
}
}
@@ -177,8 +193,9 @@
// 璁剧疆Canvas灞炴��
canvas.overrideSorting = true;
-
canvas.worldCamera = CameraManager.uiCamera;
+
+ canvas.sortingLayerID = SortingLayer.NameToID("UI"); // 纭繚浣跨敤姝g‘鐨勬帓搴忓眰
// 鑾峰彇鎴栨坊鍔燙anvasGroup缁勪欢
canvasGroup = GetComponent<CanvasGroup>();
@@ -194,6 +211,9 @@
}
canvasScaler = GetComponent<CanvasScaler>();
+ canvasScaler.referenceResolution = Constants.DESIGN_RESOLUTION;
+ canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
+ canvasScaler.matchWidthOrHeight = 0;
}
// 鑾峰彇蹇呰鐨勭粍浠�
@@ -224,6 +244,12 @@
// 鎵撳紑UI
public void HandleOpen()
{
+ if (_rectTransform == null)
+ {
+ Debug.LogError($"鐣岄潰: {uiName} 闇�瑕佽缃牴鑺傜偣_rectTransform ");
+ return;
+ }
+
OnPreOpen();
// 濡傛灉姝e湪鎾斁鍔ㄧ敾锛屽厛鍋滄
StopCurrentAnimation();
@@ -236,6 +262,10 @@
// 鏍规嵁鍔ㄧ敾绫诲瀷鎾斁鎵撳紑鍔ㄧ敾
PlayOpenAnimation();
+
+ // // 濡傛灉鍚庣画闇�瑕佺粺涓�澶勭悊鍒樻捣鎴栬�呭皬娓告垙鐨勭晫闈㈤�傞厤闂
+ // _rectTransform.offsetMin = new Vector2(0, 10); //涓嬫柟
+ // _rectTransform.offsetMax = new Vector2(0, -50); //涓婃柟
OnOpen();
@@ -323,148 +353,17 @@
/// <summary>
/// 鎾斁UI鐗规晥
/// </summary>
- /// <param name="effectName">鐗规晥璧勬簮鍚嶇О</param>
+ /// <param name="id">鐗规晥璧勬簮鍚嶇О</param>
/// <param name="parent">鐗规晥鐖惰妭鐐癸紝榛樿涓哄綋鍓峌I</param>
- /// <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 UIEffectPlayer PlayUIEffect(int id, Transform parent = null)
{
// 浣跨敤榛樿鍊�
if (parent == null) parent = transform;
-
- EffectConfig effectCfg = EffectConfig.Get(id);
- if (null == effectCfg)
- {
- return null;
- }
-
- // 鍔犺浇鐗规晥璧勬簮
- 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 UIEffectPlayer.CreateEffect(id, parent, false);
}
- /// <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
@@ -515,9 +414,9 @@
canvasGroup.alpha = 0f;
canvasGroup.blocksRaycasts = false;
}
- if (canvasScaler != null)
+ if (_rectTransform != null)
{
- canvasScaler.scaleFactor = 1f;
+ _rectTransform.localScale = Vector3.one;
}
break;
@@ -527,9 +426,9 @@
canvasGroup.alpha = 1f;
canvasGroup.blocksRaycasts = false;
}
- if (canvasScaler != null)
+ if (_rectTransform != null)
{
- canvasScaler.scaleFactor = 0.3f;
+ _rectTransform.localScale = Vector3.one * 0.3f;
}
break;
@@ -578,9 +477,9 @@
canvasGroup.alpha = 1f;
canvasGroup.blocksRaycasts = false;
}
- if (canvasScaler != null)
+ if (_rectTransform != null)
{
- canvasScaler.scaleFactor = 0.3f;
+ _rectTransform.localScale = Vector3.one * 0.3f;
}
break;
}
@@ -603,7 +502,7 @@
case UIAnimationType.ScaleInOut:
if (_rectTransform != null)
{
- currentAnimation.Append(DOVirtual.Float(0.3f, 1f, animeDuration, (value) => {canvasScaler.scaleFactor = value;}).SetEase(animationEase));
+ currentAnimation.Append(DOVirtual.Float(0.3f, 1f, animeDuration, (value) => {_rectTransform.localScale = Vector3.one * value;}).SetEase(animationEase));
}
break;
@@ -619,8 +518,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));
+ float startScale = scaleOverInOutCurve.curve.Evaluate(0f);
+ _rectTransform.localScale = Vector3.one * startScale;
+ currentAnimation.Append(
+ DOTween.To(
+ () => _rectTransform.localScale.x,
+ (value) => _rectTransform.localScale = Vector3.one * value,
+ 1f,
+ animeDuration
+ )
+ .SetEase(scaleOverInOutCurve.curve)
+ .OnComplete(() => _rectTransform.localScale = Vector3.one) // 纭繚鏈�缁堝��1姝g‘
+ );
+
}
break;
}
@@ -629,7 +539,7 @@
currentAnimation.OnComplete(() =>
{
isAnimating = false;
-
+ _ResetToBegin();
OnOpenAnimationComplete();
// 鍚敤浜や簰
@@ -670,9 +580,9 @@
canvasGroup.alpha = 1f;
canvasGroup.blocksRaycasts = true;
}
- if (canvasScaler != null)
+ if (_rectTransform != null)
{
- canvasScaler.scaleFactor = 1f;
+ _rectTransform.localScale = Vector3.one;
}
if (_rectTransform != null)
@@ -716,7 +626,7 @@
case UIAnimationType.ScaleOverInOut:
if (_rectTransform != null)
{
- currentAnimation.Append(DOVirtual.Float(1f, 0.3f, animeDuration, (value) => {canvasScaler.scaleFactor = value;}).SetEase(animationEase));
+ currentAnimation.Append(DOVirtual.Float(1f, 0.3f, animeDuration, (value) => {_rectTransform.localScale = Vector3.one * value;}).SetEase(animationEase));
}
break;
--
Gitblit v1.8.0