Parcourir la source

飞行逻辑验证开关

LAPTOP-OM1V99U2\永远de小亡灵 il y a 11 mois
Parent
commit
a00c95c3f3

+ 1 - 0
ActionTowerDefense/Assets/Resources/Prefab/Enemy_Arrow.prefab

@@ -1145,6 +1145,7 @@ MonoBehaviour:
   rushHaveAttack: 0
   downRushTime: 0
   finishRushTime: 0
+  upFirstAfterWeaknessOrNot: 0
 --- !u!54 &8639832132491289349
 Rigidbody:
   m_ObjectHideFlags: 0

+ 37 - 5
ActionTowerDefense/Assets/Scripts/Demonic.cs

@@ -45,6 +45,8 @@ public class Demonic : MoveCharacter
     public int dropSoulMin = 1;
     public float dropSoulAngle = 60f;
 
+    [Header("验证功能开关")]
+    public bool upFirstAfterWeaknessOrNot;  //虚弱结束后是否先升高
     private void Awake()
     {
     }
@@ -268,7 +270,7 @@ public class Demonic : MoveCharacter
         return false;
     }
 
-    public void AdjustHeight()
+    public bool AdjustHeight()
     {
         if (canFly)
         {
@@ -277,14 +279,17 @@ public class Demonic : MoveCharacter
                 Vector3 pos = transform.position;
                 pos.y -= flyUpSpeed * Time.deltaTime;
                 transform.position = pos;
+                return false;
             }
             else if (transform.position.y - flyHeight < -0.1f)
             {
                 Vector3 pos = transform.position;
                 pos.y += flyUpSpeed * Time.deltaTime;
                 transform.position = pos;
+                return false;
             }
         }
+        return true;
     }
 
     public override void OnState()
@@ -325,7 +330,11 @@ public class Demonic : MoveCharacter
                     ChangeState(CharacterState.Run);
                     break;
                 }
-                AdjustHeight();
+                
+                if (!upFirstAfterWeaknessOrNot)
+                {
+                    AdjustHeight();
+                }
                 rb.velocity = Vector3.right * velocityAddition;
                 break;
             case CharacterState.Run:
@@ -378,7 +387,10 @@ public class Demonic : MoveCharacter
                         Turn();
                     }
                 }
-                AdjustHeight();
+                if (!upFirstAfterWeaknessOrNot)
+                {
+                    AdjustHeight();
+                }
                 break;
             case CharacterState.Rush:
                 if (isAttack)
@@ -430,7 +442,7 @@ public class Demonic : MoveCharacter
                         Turn();
                     }
                 }
-                AdjustHeight();
+                //AdjustHeight();
                 break;
             case CharacterState.Rise:
                 if (rb.velocity.y <= 0)
@@ -549,7 +561,26 @@ public class Demonic : MoveCharacter
                 }
                 if (weakTime <= 0)
                 {
-                    ChangeState(CharacterState.Idle);
+                    if (upFirstAfterWeaknessOrNot)
+                    {
+                        if (AdjustHeight())
+                        {
+                            ChangeState(CharacterState.Idle);
+                        }
+                        else
+                        {
+                            if (ani.GetCurrentAnimatorClipInfo(0)[0].clip.name != "walk")
+                            {
+                                ani.Play("walk", 0, 0);
+                                aniCollider.Play("Walk", 0, 0);
+                            }
+                        }
+                    }
+                    else
+                    {
+                        ChangeState(CharacterState.Idle);
+                    }
+
                     break;
                 }
                 break;
@@ -748,6 +779,7 @@ public class Demonic : MoveCharacter
                 break;
             case CharacterState.Weak:
                 weakTime = totalWeakTime;
+                flyHeight = Random.Range(minHeight, maxHeight);
                 break;
             case CharacterState.Float:
                 canMove = false;

+ 36 - 5
ActionTowerDefense/Assets/Scripts/Enemy.cs

@@ -87,6 +87,8 @@ public class Enemy : MoveCharacter
     public float downRushTime;
     public float finishRushTime;
 
+    [Header("验证功能开关")]
+    public bool upFirstAfterWeaknessOrNot;  //虚弱结束后是否先升高
     private void Awake()
     {
         aimDistance = rushTime * rushSpeed / 2;
@@ -227,7 +229,7 @@ public class Enemy : MoveCharacter
         return false;
     }
 
-    public void AdjustHeight()
+    public bool AdjustHeight()
     {
         if (canFly)
         {
@@ -236,14 +238,17 @@ public class Enemy : MoveCharacter
                 Vector3 pos = transform.position;
                 pos.y -= flyUpSpeed * Time.deltaTime;
                 transform.position = pos;
+                return false;
             }
             else if (transform.position.y - flyHeight < -0.1f)
             {
                 Vector3 pos = transform.position;
                 pos.y += flyUpSpeed * Time.deltaTime;
                 transform.position = pos;
+                return false;
             }
         }
+        return true;
     }
 
     public override void OnState()
@@ -285,7 +290,11 @@ public class Enemy : MoveCharacter
                     break;
                 }
                 //rb.velocity = Vector3.zero;
-                AdjustHeight();
+                if (!upFirstAfterWeaknessOrNot)
+                {
+                    AdjustHeight();
+                }
+                
                 break;
             case CharacterState.Run:
                 if (isAttack)
@@ -327,7 +336,10 @@ public class Enemy : MoveCharacter
                         Turn();
                     }
                 }
-                AdjustHeight();
+                if (!upFirstAfterWeaknessOrNot)
+                {
+                    AdjustHeight();
+                }
                 break;
             case CharacterState.Rush:
                 if (isAttack)
@@ -379,7 +391,7 @@ public class Enemy : MoveCharacter
                         Turn();
                     }
                 }
-                AdjustHeight();
+                //AdjustHeight();
                 break;
             case CharacterState.Rise:
                 if (rb.velocity.y <= 0)
@@ -473,7 +485,25 @@ public class Enemy : MoveCharacter
                 }
                 if (weakTime <= 0)
                 {
-                    ChangeState(CharacterState.Idle);
+                    if (upFirstAfterWeaknessOrNot)
+                    {
+                        if (AdjustHeight())
+                        {
+                            ChangeState(CharacterState.Idle);
+                        }
+                        else
+                        {
+                            if (ani.GetCurrentAnimatorClipInfo(0)[0].clip.name != "walk")
+                            {
+                                ani.Play("walk", 0, 0);
+                                aniCollider.Play("Walk", 0, 0);
+                            }
+                        }
+                    }
+                    else
+                    {
+                        ChangeState(CharacterState.Idle);
+                    }
                     break;
                 }
 
@@ -776,6 +806,7 @@ public class Enemy : MoveCharacter
                         break;
                     default:
                         weakTime = totalWeakTime;
+                        flyHeight = Random.Range(minHeight, maxHeight);
                         //hurtKeepTime = minHurtKeepTime;
                         break;
                 }