소스 검색

敌方隐身英灵被打了往回跑

LAPTOP-OM1V99U2\永远de小亡灵 1 년 전
부모
커밋
2106ae5f4e

+ 5 - 0
ActionTowerDefense/Assets/Resources/Prefab/ESpirits_Invisible.prefab

@@ -166,8 +166,10 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 63bf8474172e7124b9a3bba45d4101b0, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  state: 0
   rb: {fileID: 2437299196472462355}
   moveSpeed: 5
+  upMoveSpeed: 20
   altitude: 7
   randomRageY: 5
   randomRageX: 5
@@ -177,6 +179,9 @@ MonoBehaviour:
   stopsNumber: 3
   nowNumber: 0
   nowPlayer: 0
+  back: 20
+  hp: 0
+  enemy: {fileID: 3231703488858309205}
 --- !u!54 &2437299196472462355
 Rigidbody:
   m_ObjectHideFlags: 0

+ 67 - 16
ActionTowerDefense/Assets/Scripts/Spirits/ESpirits_Invisible.cs

@@ -1,11 +1,18 @@
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
-
+public enum InvisibleState
+{
+    None = -1,
+    Normal = 0, //Õý³£×´Ì¬
+    Hurt = 1,   //±»´ò״̬
+}
 public class ESpirits_Invisible : MonoBehaviour
 {
+    public InvisibleState state;
     public Rigidbody rb;
     public float moveSpeed;
+    public float upMoveSpeed;
     public float altitude;
     public float randomRageY;
     public float randomRageX;
@@ -20,27 +27,71 @@ public class ESpirits_Invisible : MonoBehaviour
     public int nowNumber;
     [HideInInspector]
     public int nowPlayer;
+    public float back;
+    [HideInInspector]
+    public int hp;
+    public Enemy enemy;
+    [HideInInspector]
+    public float posx;
+    private void Awake()
+    {
+        hp = enemy.hp;
+    }
     private void Update()
     {
-        targetPos =
-            new Vector3(PlayersInput.instance[nowPlayer].transform.position.x + offsetX, altitude + offsetY, 0);
-        Goto(targetPos);
-        if (Vector3.Distance(targetPos, transform.position) < 1)
+        OnState();
+    }
+    void OnState()
+    {
+        
+        switch (state)
         {
-            
-            offsetY = Random.Range(-randomRageY, randomRageY);
-            offsetX = Random.Range(-randomRageX, randomRageX);
-            nowNumber++;
-            if (nowNumber > stopsNumber)
-            {
-                nowNumber = 0;
-                nowPlayer = 1 - nowPlayer;
-            }
+            case InvisibleState.Normal:
+                if (hp != enemy.hp)
+                {
+                    posx = transform.position.x;
+                    state = InvisibleState.Hurt;
+                }
+                posx = Mathf.Min(PlayersInput.instance[0].transform.position.x,
+                    PlayersInput.instance[1].transform.position.x);
+                
+
+                targetPos = new Vector3(posx + offsetX,altitude + offsetY, 0);
+                Goto(targetPos,moveSpeed);
+                if (Vector3.Distance(targetPos, transform.position) < 1)
+                {
+
+                    offsetY = Random.Range(-randomRageY, randomRageY);
+                    offsetX = Random.Range(-randomRageX, randomRageX);
+                    nowNumber++;
+                    if (nowNumber > stopsNumber)
+                    {
+                        nowNumber = 0;
+                        nowPlayer = 1 - nowPlayer;
+                    }
+                }
+                break;
+            case InvisibleState.Hurt:
+                targetPos = new Vector3(posx + offsetX - back,
+                    altitude + offsetY, 0);
+                Goto(targetPos, moveSpeed);
+                if (Vector3.Distance(targetPos, transform.position) < 1)
+                {
+
+                    offsetY = Random.Range(-randomRageY, randomRageY);
+                    offsetX = Random.Range(-randomRageX, randomRageX);
+                    hp = enemy.hp;
+                    state = InvisibleState.Normal;
+                }
+                break;
+            default:
+                break;
         }
+
     }
-    public void Goto(Vector3 pos)
+    public void Goto(Vector3 pos,float speed)
     {
         Vector3 target = (pos - transform.position).normalized;
-        rb.velocity = target * moveSpeed;
+        rb.velocity = target * speed;
     }
 }