Parcourir la source

修改生发和秃头逻辑,【是否能召唤胖子】更明显

SZAND\msx_2 il y a 6 mois
Parent
commit
b54243625f

+ 10 - 0
ActionTowerDefense/Assets/Scenes/Game.unity

@@ -30936,6 +30936,7 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   imgHp: {fileID: 2035765039200662796}
   pc: {fileID: 0}
+  points: []
 --- !u!114 &2035765039221954014
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -31649,6 +31650,15 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   imgHp: {fileID: 8826891585155877212}
   pc: {fileID: 0}
+  points:
+  - mp: 20
+    size: 0.1
+  - mp: 140
+    size: 0.2
+  - mp: 150
+    size: 0.6
+  - mp: 400
+    size: 0.9
 --- !u!114 &8826891585155877212
 MonoBehaviour:
   m_ObjectHideFlags: 0

+ 1 - 2
ActionTowerDefense/Assets/Scripts/Characters/PlayerController.cs

@@ -1515,8 +1515,8 @@ public class PlayerController : MoveCharacter
             mp = 0;
         }
         uiMp.Show(mp, totalMp);
-
     }
+
     public void PlayerDie()
     {
         switch (playerId)
@@ -1541,7 +1541,6 @@ public class PlayerController : MoveCharacter
         reviveTime = 0;
     }
 
-
     public void PlayerRevive()
     {
         isRevive = false;

+ 35 - 2
ActionTowerDefense/Assets/Scripts/UIHP.cs

@@ -5,9 +5,17 @@ using UnityEngine.UI;
 
 public class UIHP : MonoBehaviour
 {
+    [System.Serializable]
+    public struct HairSize
+    {
+        public float mp;
+        public float size;
+    }
     public Image imgHp;
     [HideInInspector]
     public PlayerController pc;
+    [Header("发量参数")]
+    public List<HairSize> points;
     
     public void Show(int hp, int totalHp)
     {
@@ -19,11 +27,36 @@ public class UIHP : MonoBehaviour
     {
         float ratio = hp / totalHp;
         imgHp.fillAmount = ratio;
-        ChangeHairSize(ratio);
+        ChangeHairSize(hp);
     }
 
-    private void ChangeHairSize(float ratio)
+    //为什么写在这里,因为可以每次引用到蓝耗的函数时直接调用,不需要一行一行加了
+    private void ChangeHairSize(float curMp)
     {
+        float ratio = curMp;
+        if (curMp <= points[0].mp)
+        {
+            ratio = ratio * points[0].size / points[0].mp;
+        }
+        else if (curMp > points[points.Count - 1].mp)
+        {
+            ratio -= points[points.Count - 1].mp;
+            ratio = ratio * (1 - points[points.Count - 1].size) / (pc.totalMp - points[points.Count - 1].mp)
+                + points[points.Count - 1].size;
+        }
+        else
+        {
+            for (int i = 1; i < points.Count; i++)
+            {
+                if (curMp <= points[i].mp)
+                {
+                    ratio -= points[i - 1].mp;
+                    ratio = ratio * ((points[i].size - points[i - 1].size) / (points[i].mp - points[i - 1].mp))
+                         + points[i - 1].size;
+                    break;
+                }  
+            }
+        }
         pc.ani.SetLayerWeight(2, ratio);
     }
 }