Ver código fonte

规范顿帧的状态切换,初始化的时候清除isdie

WGL 2 meses atrás
pai
commit
9e324cd0da

+ 2 - 0
ActionTowerDefense/Assets/Scripts/Characters/Character.cs

@@ -22,6 +22,7 @@ public enum CharacterState
     Sprint = 10,
     Die = 11,
     HitStun,                //½©Ö±
+    FramePause,             //¶ÙÖ¡
 
     //¿ØÖÆÐ§¹û
     SpecialStatus_Float,
@@ -171,6 +172,7 @@ public class Character : MonoBehaviour
             rb.constraints = RigidbodyConstraints.FreezeRotation | RigidbodyConstraints.FreezePositionZ;
         }
         uiHp.Show(hp, totalHp);
+        isDie = false;
         ChangeState(CharacterState.Idle);
 
         if (attackController != null)

+ 5 - 2
ActionTowerDefense/Assets/Scripts/Characters/Demonic.cs

@@ -264,7 +264,7 @@ public class Demonic : MoveCharacter
     public override void OnState()
     {
         base.OnState();
-        if (state == CharacterState.None)
+        if (state == CharacterState.FramePause)
         {
             return;
         }
@@ -643,7 +643,7 @@ public class Demonic : MoveCharacter
 
     public override void ChangeState(CharacterState newState)
     {
-        if (state == newState)
+        if (state == newState || newState == CharacterState.FramePause)
         {
             return;
         }
@@ -683,6 +683,9 @@ public class Demonic : MoveCharacter
             case CharacterState.LockSoul:
                 //isReturnSoulTower = true;
                 break;
+            case CharacterState.FramePause:
+                state = newState;
+                return;
             default:
                 break;
         }

+ 5 - 2
ActionTowerDefense/Assets/Scripts/Characters/Enemy.cs

@@ -228,7 +228,7 @@ public class Enemy : MoveCharacter
     public override void OnState()
     {
         base.OnState();
-        if (state == CharacterState.None)
+        if (state == CharacterState.FramePause)
         {
             return;
         }
@@ -545,7 +545,7 @@ public class Enemy : MoveCharacter
 
     public override void ChangeState(CharacterState newState)
     {
-        if (state == newState)
+        if (state == newState || newState == CharacterState.FramePause)
         {
             return;
         }
@@ -580,6 +580,9 @@ public class Enemy : MoveCharacter
             case CharacterState.Die:
                 isDie = false;
                 break;
+            case CharacterState.FramePause:
+                state = newState;
+                return;
             default:
                 break;
         }

+ 7 - 2
ActionTowerDefense/Assets/Scripts/Characters/HitFeedbackSystem.cs

@@ -32,6 +32,11 @@ public class HitFeedbackSystem : MonoBehaviour
         
     }
 
+    private void OnDisable()
+    {
+        isFreeze = false;
+    }
+
     void FixedUpdate()
     {
         //¶ÙÖ¡
@@ -49,7 +54,7 @@ public class HitFeedbackSystem : MonoBehaviour
                 {
                     character.rb.constraints = origRC;
                     character.rb.velocity = velocity;
-                    character.state = curCharacterState;
+                    character.ChangeState(curCharacterState);
                 }
                 attributeStatus.AddSpecialState(attackInfoData, attackFromData);
             }
@@ -87,7 +92,7 @@ public class HitFeedbackSystem : MonoBehaviour
                 origRC = character.rb.constraints;
                 velocity = character.rb.velocity;
                 curCharacterState = character.state;
-                character.state = CharacterState.None;
+                character.ChangeState(CharacterState.FramePause);
             }
             isFreeze = true;
             character.ani.speed = 0;