Эх сурвалжийг харах

怨气弹可以攻击上下,而非仅左右

SZAND\msx_2 10 сар өмнө
parent
commit
9072acb8d3

+ 5 - 5
ActionTowerDefense/Assets/Resources/Prefab/Conduct/AngryBullet.prefab

@@ -44,7 +44,7 @@ BoxCollider:
   m_IsTrigger: 1
   m_Enabled: 1
   serializedVersion: 2
-  m_Size: {x: 1, y: 1, z: 1}
+  m_Size: {x: 1, y: 1, z: 20}
   m_Center: {x: 0, y: 0, z: 0}
 --- !u!114 &2069529063800026293
 MonoBehaviour:
@@ -162,13 +162,13 @@ MonoBehaviour:
   conductId: 0
   damage: 100
   ens: []
-  hasTarget: 0
+  hasTarget: {fileID: 0}
   searchCol: {fileID: 4463968343755598858}
-  maxTime: 0.2
+  maxTime: 0.02
   maxTimes: 7
   curTimes: 0
-  firstMaxDis: 20
-  maxDistance: 10
+  firstMaxDis: 99
+  maxDistance: 99
   self: {fileID: 322494267869588354}
   speed: 20
   fx: 1

+ 28 - 5
ActionTowerDefense/Assets/Scripts/Conduct/AngryBullet.cs

@@ -21,7 +21,7 @@ public class AngryBullet : MonoBehaviour
 
     [Header("Ä¿±êµ¥Î»")]
     public Enemy[] ens;
-    public bool hasTarget;
+    public Enemy hasTarget;
     public BoxCollider searchCol;
 
     [Header("Ë÷µÐʱ¼ä")]
@@ -47,6 +47,7 @@ public class AngryBullet : MonoBehaviour
     {
         Vector3 size = searchCol.size;
         size.x = maxDistance * 2;
+        size.y = maxDistance * 2;
         searchCol.size = size;
         ens = new Enemy[maxTimes];
         if (owner.bodyTrans.localScale.x < 0)
@@ -80,12 +81,23 @@ public class AngryBullet : MonoBehaviour
         switch (state)
         {
             case BulletState.findTarget:
-                hasTarget = false;
+                hasTarget = null;
                 searchCol.enabled = true;
                 curTime = maxTime;
                 break;
             case BulletState.traceTarget:
-                fx = -fx;
+                if (!hasTarget)
+                {
+                    fx = (int)-owner.bodyTrans.localScale.x;
+                }
+                else if (hasTarget.transform.position.x > transform.position.x)
+                {
+                    fx = 1;
+                }
+                else
+                {
+                    fx = -1;
+                }
                 transform.localScale = new Vector3(fx, 1, 1);
                 self.enabled = true;
                 break;
@@ -110,8 +122,19 @@ public class AngryBullet : MonoBehaviour
                 }
                 break;
             case BulletState.traceTarget:
-                curDis = fx * speed * Time.deltaTime;
-                transform.position += new Vector3(curDis, 0, 0);
+                Vector3 dir;
+                if (!isFirst && (hasTarget == null || hasTarget.isDie))
+                {
+                    ChangeState(BulletState.findTarget);
+                    dir = new Vector3(fx, 0, 0);
+                }
+                else
+                {
+                    dir = (hasTarget.transform.position + Vector3.up - transform.position).normalized;
+                }
+                Vector3 move = dir * speed * Time.deltaTime;
+                curDis = move.x;
+                transform.position += move;
                 if (isFirst && Mathf.Abs(curDis) >= firstMaxDis)
                 {
                     ChangeState(BulletState.die);

+ 2 - 6
ActionTowerDefense/Assets/Scripts/Conduct/AngryBulletSearch.cs

@@ -11,12 +11,8 @@ public class AngryBulletSearch : MonoBehaviour
     {
         if (other.gameObject.layer == 8 && Array.IndexOf(ab.ens, other.GetComponentInParent<Enemy>()) == -1)
         {
-            if (ab.fx == -1 && other.gameObject.transform.position.x >= transform.position.x ||
-                ab.fx == 1 && other.gameObject.transform.position.x <= transform.position.x)
-            {
-                ab.hasTarget = true;
-                ab.ChangeState(AngryBullet.BulletState.traceTarget);
-            }
+            ab.hasTarget = other.GetComponentInParent<Enemy>();
+            ab.ChangeState(AngryBullet.BulletState.traceTarget);
         }
     }
 }