Browse Source

Merge branch 'master' of http://192.168.123.2:3000/fort23/XY001

DESKTOP-FB72PO8\Administrator 4 months ago
parent
commit
7890185f65

+ 75 - 0
Assets/Scripts/GameUI/UI/Hero/AnimateNumber.cs

@@ -0,0 +1,75 @@
+using Fort23.Core;
+using TMPro;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace Fort23.Mono
+{
+    /// <summary>
+    /// 数字变化
+    /// </summary>
+    public class AnimateNumber
+    {
+        private Text targetTxt;
+        private TextMeshProUGUI targetTextPro;
+        private long startValue;
+        private long endValue;
+        private float time;
+        private float timeElapsed;
+        
+        public AnimateNumber(Text targetTxt = null, TextMeshProUGUI targetTextPro = null)
+        {
+            this.targetTxt = targetTxt;
+            this.targetTextPro = targetTextPro;
+        }
+        
+        public void Start(long startValue, long endValue, float time = 0.3f)
+        {
+            this.startValue = startValue;
+            this.endValue = endValue;
+            this.time = time;
+            
+            timeElapsed = 0f; // 已经过的时间
+            StaticUpdater.Instance.RemoveRenderUpdateCallBack(Animate);
+            StaticUpdater.Instance.AddRenderUpdateCallBack(Animate);
+        }
+
+        public async void Reset()
+        {
+            StaticUpdater.Instance.RemoveRenderUpdateCallBack(Animate);
+            await TimerComponent.Instance.WaitAsync(1);
+        }
+        
+        private void Animate()
+        {
+            if (timeElapsed < time)
+            {
+                // 计算当前数字(插值)
+                float currentValue = Mathf.Lerp(startValue, endValue, timeElapsed / time);
+                // 将当前数字四舍五入并设置到目标文本
+                SetText(Mathf.RoundToInt(currentValue).ToString());
+        
+                timeElapsed += Time.deltaTime; // 增加经过的时间
+            }
+            else
+            {
+                // 确保最终值精确设置
+                SetText(endValue.ToString());
+                StaticUpdater.Instance.RemoveRenderUpdateCallBack(Animate);
+            }
+        }
+
+        private void SetText(string text)
+        {
+            if (targetTxt != null)
+            {
+                targetTxt.text = text;
+            }
+
+            if (targetTextPro != null)
+            {
+                targetTextPro.text = text;
+            }
+        }
+    }
+}

+ 3 - 0
Assets/Scripts/GameUI/UI/Hero/AnimateNumber.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 615040bc3e0e4cad97751d82d90e0134
+timeCreated: 1734662533

+ 89 - 41
Assets/Scripts/GameUI/UI/Hero/HeroDetailPanel.cs

@@ -348,57 +348,77 @@ namespace Fort23.Mono
                     break;
             }
 
+            AnimateNumber animTxtHp = new AnimateNumber(targetTextPro:txtHP);
+            AnimateNumber animTxtAtk = new AnimateNumber(targetTextPro:txtATK);
+            AnimateNumber animTxtDef = new AnimateNumber(targetTextPro:txtDEF);
+            AnimateNumber animTxtShanBi = new AnimateNumber(targetTextPro:txtSHANBI);
+            
+            animateNumberList = new List<AnimateNumber>();
+            animateNumberList.Add(animTxtHp);
+            animateNumberList.Add(animTxtAtk);
+            animateNumberList.Add(animTxtDef);
+            animateNumberList.Add(animTxtShanBi);
+            
             UpdateAttributeUI(true);
         }
 
+        private List<AnimateNumber> animateNumberList;
+        
         private long curHeroCount;
         private long costHeroCount;
         public async void UpdateAttributeUI(bool isInit = false)
         {
             StarsObj.SetActive(true);
-            if (txtHP.text != heroInfo.hp.Value.ToStringEx())
-            {
-                long old = long.Parse(txtHP.text);
-                txtHP.text = heroInfo.hp.Value.ToStringEx();
-                if(!isInit)
-                    await UIManager.Instance.CreateGComponent<HeroUpTxtEft>(delegate(HeroUpTxtEft heroUpTxtEft)
-                        {
-                            heroUpTxtEft.txtEft.text = "+" + (heroInfo.hp.Value - old).ToStringEx();
-                        }, 
-                        poolName: "HeroUpTxtEft", root: eftNumPos[0] as RectTransform);
-            }
-
-            if (txtATK.text != heroInfo.attack.Value.ToStringEx())
-            {
-                long old = long.Parse(txtATK.text);
-                txtATK.text = heroInfo.attack.Value.ToStringEx();
-                if(!isInit)
-                    await UIManager.Instance.CreateGComponent<HeroUpTxtEft>(delegate(HeroUpTxtEft heroUpTxtEft)
-                        {
-                            heroUpTxtEft.txtEft.text = "+" + (heroInfo.attack.Value - old).ToStringEx();
-                        },
-                        poolName: "HeroUpTxtEft", root: eftNumPos[1] as RectTransform);
-            }
+            
+            PlayEft(isInit, txtHP, heroInfo.hp.Value.ToStringEx(), 0);
+            
+            // if (txtHP.text != heroInfo.hp.Value.ToStringEx())
+            // {
+            //     long old = long.Parse(txtHP.text);
+            //     txtHP.text = heroInfo.hp.Value.ToStringEx();
+            //     if(!isInit)
+            //         await UIManager.Instance.CreateGComponent<HeroUpTxtEft>(delegate(HeroUpTxtEft heroUpTxtEft)
+            //             {
+            //                 heroUpTxtEft.txtEft.text = "+" + (heroInfo.hp.Value - old).ToStringEx();
+            //             }, 
+            //             poolName: "HeroUpTxtEft", root: eftNumPos[0] as RectTransform);
+            // }
 
-            if (txtDEF.text != heroInfo.defense.Value.ToStringEx())
-            {
-                long old = long.Parse(txtDEF.text);
-                txtDEF.text = heroInfo.defense.Value.ToStringEx();
-                if(!isInit)
-                    await UIManager.Instance.CreateGComponent<HeroUpTxtEft>(delegate(HeroUpTxtEft heroUpTxtEft)
-                        {
-                            heroUpTxtEft.txtEft.text = "+" + (heroInfo.defense.Value - old).ToStringEx();
-                        },
-                        poolName: "HeroUpTxtEft", root: eftNumPos[2] as RectTransform);
-            }
+            PlayEft(isInit, txtATK, heroInfo.attack.Value.ToStringEx(), 1);
+            
+            // if (txtATK.text != heroInfo.attack.Value.ToStringEx())
+            // {
+            //     long old = long.Parse(txtATK.text);
+            //     txtATK.text = heroInfo.attack.Value.ToStringEx();
+            //     if(!isInit)
+            //         await UIManager.Instance.CreateGComponent<HeroUpTxtEft>(delegate(HeroUpTxtEft heroUpTxtEft)
+            //             {
+            //                 heroUpTxtEft.txtEft.text = "+" + (heroInfo.attack.Value - old).ToStringEx();
+            //             },
+            //             poolName: "HeroUpTxtEft", root: eftNumPos[1] as RectTransform);
+            // }
+            
+            PlayEft(isInit, txtDEF, heroInfo.defense.Value.ToStringEx(), 2);
+            // if (txtDEF.text != heroInfo.defense.Value.ToStringEx())
+            // {
+            //     long old = long.Parse(txtDEF.text);
+            //     txtDEF.text = heroInfo.defense.Value.ToStringEx();
+            //     if(!isInit)
+            //         await UIManager.Instance.CreateGComponent<HeroUpTxtEft>(delegate(HeroUpTxtEft heroUpTxtEft)
+            //             {
+            //                 heroUpTxtEft.txtEft.text = "+" + (heroInfo.defense.Value - old).ToStringEx();
+            //             },
+            //             poolName: "HeroUpTxtEft", root: eftNumPos[2] as RectTransform);
+            // }
 
-            if (txtSHANBI.text != heroInfo.shanbi.Value.ToStringEx())
-            {
-                txtSHANBI.text = heroInfo.shanbi.Value.ToStringEx();
-                if(!isInit)
-                    await UIManager.Instance.CreateGComponent<HeroUpTxtEft>(null,
-                        poolName: "HeroUpTxtEft", root: eftNumPos[3] as RectTransform);
-            }
+            PlayEft(isInit, txtSHANBI, heroInfo.shanbi.Value.ToStringEx(), 3);
+            // if (txtSHANBI.text != heroInfo.shanbi.Value.ToStringEx())
+            // {
+            //     txtSHANBI.text = heroInfo.shanbi.Value.ToStringEx();
+            //     if(!isInit)
+            //         await UIManager.Instance.CreateGComponent<HeroUpTxtEft>(null,
+            //             poolName: "HeroUpTxtEft", root: eftNumPos[3] as RectTransform);
+            // }
             
             
             txtLv.text = heroInfo.level.Value.ToStringEx();
@@ -460,5 +480,33 @@ namespace Fort23.Mono
             }
         }
 
+        /// <summary>
+        /// 当基础属性改变时,做一些表现
+        /// </summary>
+        /// <param name="isInit">是否为首次(初始), 首次不做动画处理</param>
+        /// <param name="txtOld">当前(旧的)</param>
+        /// <param name="txtNew"></param>
+        /// <param name="eftRoot"></param>
+        private async void PlayEft(bool isInit, TextMeshProUGUI txtOld, string txtNew, int idx)
+        {
+            if (txtOld.text != txtNew)
+            {
+                long old = long.Parse(txtOld.text);
+                long newV = long.Parse(txtNew);
+                txtOld.text = txtNew;
+                if (!isInit)
+                {
+                    animateNumberList[idx].Start(old, newV);
+                    
+                    await UIManager.Instance.CreateGComponent(delegate(HeroUpTxtEft heroUpTxtEft)
+                        {
+                            heroUpTxtEft.txtEft.text = "+" + (newV - old).ToStringEx();
+                        }, 
+                        poolName: "HeroUpTxtEft", root: eftNumPos[idx] as RectTransform);
+                }
+                    
+            }
+        }
+
     }
 }

+ 9 - 0
Assets/Scripts/GameUI/UI/Hero/HeroUITools.cs

@@ -13,6 +13,15 @@ namespace Fort23.Mono
      
         
         
+        
+
+        
+        
+        /// <summary>
+        /// 获取技能参数
+        /// </summary>
+        /// <param name="skillConfig"></param>
+        /// <returns></returns>
         public static object[] GetSkillParam(SkillConfig skillConfig)
         {
             object[] data = null;

+ 3 - 3
UserSettings/EditorUserSettings.asset

@@ -54,13 +54,13 @@ EditorUserSettings:
       value: 183b144645154b7802000a2b17364d11021e17246e72662b47695d73a2a07478a2a505e1e82d6f2f100cca3210371526d1051c05e22a040f2507f00b32f01c061ccb5a9f5ace1e10d81c50a48d5d91a3959694aa9ad8efd7c9f2afe0f1c0fcfdf6f8b6f2a5a6dacfb89debbfa1cbc9c3f5c3bac18e9c89c1bbdec2d6f2b992939996c59699c79ae8d182b7baad82aba0b0aea88398abdbf1dd8a8ea765ffc520262728fafcf8f6c28eb162945c71898d6167877a72a980809c9f71cecece859d579fd5f106dbdadb21de0dde237c686c76706641634c764f547c624a7e622d6628286620686f653d2b635a0204003e0805017509093043470e3643041c5d5b415c54450e1c424b420f6e4b634e636263696655641a1f273c0f083c1102ec362de62318e9ea25ab61ade8ed0ee30655b0b6b7b8176615
       flags: 0
     UnityEditor.ShaderGraph.Blackboard:
-      value: 18135939215a0a5004000b0e15254b524c030a3f2964643d120d1230e9e93a3fd6e826abbd2e2d293c4ead313b08042de6030a0afa240c0d020be94c4ba75e435d8715fa32c70d15d11612dacc11fee5d3c5d1fe9ab1bf968e93e2ffcbc3e7e2f0b3ffe0e8b0be9af8ffaeffff8e85dd8390e3949c8899daa7
+      value: 18135939215a0a5004000b0e15254b524c030a3f2964643d120d1230e9e93a3fd6e826abbd2e2d293c4ead313b08042de6030a0afa240c0d020be94c4ba75e435d8715fa32c70d15d11612dacc11fee5d3c5d1fe9ab1b0968786f9abada9bbaaa6a0f3a9f2fcae8ce8a2c182a6d8c2869bd1f5dc8e9c9b97ea9c819ffcca90898d86d598899ac5
       flags: 0
     UnityEditor.ShaderGraph.FloatingWindowsLayout2:
-      value: 181344140043005e1a220d3b1f364b524c0c5a27130c293326201334cee5322ca0bd30e8eb293a707b0fd0180b3d0a36fc0d3d04e649500d1002ee0b5dbd1d2c27c00ad113cb1e10e41f1addc80993b98d9884a69ae6d8f0d1cda9e8fbfefaf9f9dea3fdb9ade882f0f7b0e1e380cafbf2c3adc18e9cd285a2908b82ec869c8395949c9483d68a8d97ddbd90bf
+      value: 181344140043005e1a220d3b1f364b524c0c5a27130c293326201334cee5322ca0bd30e8eb293a707b0fd0180b3d0a36fc0d3d04e649500d1002ee0b5dbd1d2c27c00ad113cb1e10e41f1addc80993b98d9884a69ae6d8f0d1cda9e8fbfefaf9f9dea3fdb9ade882f0f7b0e1ff929797919fe69399919196e8879d91b3ece1dac3d3c78cc2c5c09983dcf2d8ecc3f4f7c0f0f6cfcdfdcbf3ccccc9fe22aaed3a37353ef4eca5ab9d
       flags: 0
     UnityEditor.ShaderGraph.InspectorWindow:
-      value: 18135939215a0a5004000b0e15254b524c1119263f2d6a722016393ce1eb3d36e5d339f9a5602b2e2c07a37e0901373ae01e0008f707250d171df81a53a5485d41895ac825e0100ec20313c0d91cddccd3d0c7efcca9bd81908fecb0f9cfddf1eff4e7a1b1eae482f0fcaee1e1928b86d888ed9195908797a7cf
+      value: 18135939215a0a5004000b0e15254b524c1119263f2d6a722016393ce1eb3d36e5d339f9a5602b2e2c07a37e0901373ae01e0008f707250d171df81a53a5485d41895ac825e0100ec20313c0d91cddccd3d0c7efcca9bd81908cf3a1a7a4bdada5a4fdaef3fbab95e6edf38e9ccbddc18390ac86d4849394ea829f83f291cb918383dc8097d7c5c6
       flags: 0
     vcSharedLogLevel:
       value: 0d5e400f0650