Sfoglia il codice sorgente

修复龙卷扇部分问题

WGL 1 mese fa
parent
commit
b3d23475eb

+ 7 - 4
ActionTowerDefense/Assets/Resources/Prefab/Conduct/TornadoFan.prefab

@@ -147,10 +147,13 @@ MonoBehaviour:
   rotationRangeY: {x: -2, y: 2}
   distance: 0.5
   landingDamageRate: 2.5
-  forceRate: 1
-  forceMax: 110
-  weakTime: 2
-  lerpValue: 10
+  forceRate: 5
+  forceMax: 100
+  forceMin: 50
+  weakTime: 1
+  lerpValueMax: 10
+  lerpValueMin: 2
+  lerpRate: 1
   damage: 0
   totalTime: 0
   time: 0

+ 0 - 7
ActionTowerDefense/Assets/Scripts/Characters/AttackTrigger.cs

@@ -142,14 +142,12 @@ public class AttackTrigger : MonoBehaviour
     public void DoT()
     {
         if (!isDoT) return;
-        List<int> dieIndex = new List<int>();
         for(int i = 0; i < trigedObjs.Count; i++)
         {
             BeHitTrigger beHitTrigger = trigedObjs[i];
             float time = trigedTime[i];
             if (beHitTrigger.owner.isDie)
             {
-                dieIndex.Add(i);
                 continue;
             }
             time -= Time.deltaTime;
@@ -163,10 +161,5 @@ public class AttackTrigger : MonoBehaviour
                 trigedTime[i] = time;
             }
         }
-        for(int i = dieIndex.Count - 1; i >= 0; i--)
-        {
-            trigedObjs.RemoveAt(i);
-            trigedTime.RemoveAt(i);
-        }
     }
 }

+ 31 - 9
ActionTowerDefense/Assets/Scripts/Conduct/TornadoFan.cs

@@ -13,8 +13,11 @@ public class TornadoFan : AttackTrigger
     [LabelText("落地伤害倍率")] public float landingDamageRate;
     [LabelText("结束击飞力的斜率")] public float forceRate;
     [LabelText("结束击飞力最大值")] public float forceMax;
+    [LabelText("结束击飞力最小值")] public float forceMin;
     [LabelText("落地后眩晕时间")] public float weakTime;
-    public float lerpValue;
+    [LabelText("最大速度")]public float lerpValueMax;
+    [LabelText("最小速度")]public float lerpValueMin;
+    [LabelText("速度斜率")]public float lerpRate;
     [DisplayOnly] public int damage;
     [DisplayOnly] public float totalTime;
     [DisplayOnly] public float time;                                     //经过的时间
@@ -48,13 +51,24 @@ public class TornadoFan : AttackTrigger
                         blowUp.dir = new Vector3(-1, 0.5f, 0);
                         blowUp.force = forceRate * dir + forceMax;
                     }
-                    blowUp.time = weakTime;
-                    blowUp.haveLandingDamage = true;
-                    blowUp.landingDamageRate = landingDamageRate;
-                    attackMethod.attackInfo.blowUp = blowUp;
-                    moveCharacter.attributeStatus.AddBlowUp(attackMethod, owner.bodyTrans);
-                    moveCharacter.bodyCollider.layer = LayerMask.NameToLayer("BodyToPlatformCollider");
-                    moveCharacter.attributeStatus.landingDamageFrom = owner;
+                    if(blowUp.force >= 0)
+                    {
+                        blowUp.time = weakTime;
+                        blowUp.haveLandingDamage = true;
+                        blowUp.landingDamageRate = landingDamageRate;
+                        attackMethod.attackInfo.blowUp = blowUp;
+                        moveCharacter.attributeStatus.AddBlowUp(attackMethod, owner.bodyTrans);
+                        moveCharacter.bodyCollider.layer = LayerMask.NameToLayer("BodyToPlatformCollider");
+                        moveCharacter.attributeStatus.landingDamageFrom = owner;
+                    }
+                    else
+                    {
+                        moveCharacter.ChangeState(CharacterState.Idle);
+                        bool canfly = moveCharacter.canFly;
+                        moveCharacter.rb.useGravity = !canfly;
+                        moveCharacter.nowCanFly = canfly;
+                    }
+
                 }
             }
             gameObject.SetActive(false);
@@ -97,10 +111,16 @@ public class TornadoFan : AttackTrigger
                 Vector3 nowPos = moveCharacter.transform.position;
                 Vector3 targetPos = nowPos;
                 targetPos.x = transform.position.x;
-                if (Vector3.Distance(nowPos, targetPoss[i]) < distance)
+                float targetDistance = Vector3.Distance(nowPos, targetPoss[i]);
+                if (targetDistance < distance)
                 {
                     targetPoss[i] = CalculateTargetPos(nowPos);
                 }
+                float lerpValue = lerpValueMax - (targetDistance * lerpRate);
+                if(lerpValue < lerpValueMin)
+                {
+                    lerpValue = lerpValueMin;
+                }
                 moveCharacter.transform.position = Vector3.Lerp(nowPos, targetPoss[i], lerpValue * Time.deltaTime);
                 //moveCharacter.transform.position = Vector3.Lerp(nowPos, targetPos, lerpValue * Time.deltaTime);
             }
@@ -123,6 +143,8 @@ public class TornadoFan : AttackTrigger
         attackMethod.attackInfo.damage = damage;
         transform.position = targetPos;
         targetPoss = new List<Vector3>();
+        time = 0;
+        gameObject.SetActive(true);
     }
 
     public Vector3 CalculateTargetPos(Vector3 originalPos)