Răsfoiți Sursa

远程单位子弹可选择仅瞄准/始终跟随

SZAND\msx_2 7 luni în urmă
părinte
comite
35a1a5b8c0

+ 20 - 4
ActionTowerDefense/Assets/Resources/Prefab/Enemy/Enemy_11008.prefab

@@ -228,10 +228,26 @@ MonoBehaviour:
   mecanim: {fileID: 5617185463097218335}
   meshRenderer: {fileID: 2459340336965010942}
   ani: {fileID: 6496896669866891404}
-  totalDieKeepTime: 0
-  totalAttack_summonTime: 1.2667
-  totalAttack_marchTime: 1.8333
-  attackKeys: []
+  totalDieKeepTime: 0.6666667
+  totalAttack_summonTime: 1.8333334
+  totalAttack_marchTime: 1.8333334
+  attackKeys:
+  - aniName: attack_march
+    keys:
+    - attackType: 0
+      startKeyName: attack_on
+      startKeyTime: 0.6666667
+      endType: 1
+      endKeyName: attack_off
+      endKeyTime: 1.1333334
+  - aniName: attack_summon
+    keys:
+    - attackType: 0
+      startKeyName: attack_on
+      startKeyTime: 0.6666667
+      endType: 1
+      endKeyName: attack_off
+      endKeyTime: 1.1333334
   dieKeepTime: 0
   rb: {fileID: 2437299196472462355}
   bodyTrans: {fileID: 5075820377452290163}

+ 23 - 56
ActionTowerDefense/Assets/Scripts/Bullet.cs

@@ -24,16 +24,13 @@ public class Bullet : MonoBehaviour
     public float speed;
     public float maxFlyTime = 2f;
     public float flyTime;
+    [Header("子弹是否追踪,不勾选则水平往前射出")]
     public bool isTrack;
+    private bool isFirst = true;
+    [Header("子弹是否始终追踪,勾选:子弹会跟着目标转,不勾选:子弹斜着往前直飞")]
+    public bool canAlwaysTrack;
     public Character trackTarget;
 
-    [Header("回旋镖")]
-    public bool isBack;                 //回旋镖,会回来
-    public float stayTime;              //在极点处停留时长
-    private bool isStay = false;
-    //private Vector3 curDir;
-    private bool hasBack = false;       //已经回来了
-
     [Header("传送门")]
     public bool canTransmit;            //子弹是否能被传送门传送
     public bool haveTransmit;           //刚传送过
@@ -47,6 +44,7 @@ public class Bullet : MonoBehaviour
     {
         rb = GetComponent<Rigidbody>();
     }
+  
     private void Update()
     {
         if (haveTransmit)
@@ -88,47 +86,27 @@ public class Bullet : MonoBehaviour
             gameObject.SetActive(false);
             return;
         }
-        //回旋镖
-        //if (!isStay && flyTime >= maxFlyTime)
-        //{
-        //    if (!isBack)
-        //    {
-        //        isGetTarget = true;
-        //        gameObject.SetActive(false);
-        //        return;
-        //    }
-        //    else
-        //    {
-        //        isStay = true;
-        //        flyTime = 0;
-        //        rb.velocity = Vector3.zero;
-        //    }
-        //}
-        //if(isStay && flyTime >= stayTime)
-        //{
-        //    isStay = false;
-        //    hasBack = true;
-        //    trackTarget = owner;
-        //}
-        //if (hasBack)
-        //{
-        //    if (owner.gameObject.activeSelf == false)
-        //    {
-        //        isStay = true;
-        //        flyTime = 0;
-        //        rb.velocity = Vector3.zero;
-        //    }
-        //}
         if (isTrack && trackTarget != null && !trackTarget.isDie && trackTarget.gameObject.activeInHierarchy)
         {
-            Vector3 tarDir = (trackTarget.beSearchTrigger.transform.position - transform.position).normalized;
-            tarDir.z = 0;
-            transform.right = Vector3.Lerp(transform.right, -tarDir, 0.2f);
-            rb.velocity = Vector3.Lerp(rb.velocity, speed * tarDir, 0.2f);
+            if (canAlwaysTrack)
+            {
+                Vector3 tarDir = (trackTarget.beSearchTrigger.transform.position - transform.position).normalized;
+                tarDir.z = 0;
+                transform.right = Vector3.Lerp(transform.right, -tarDir, 0.2f);
+                rb.velocity = Vector3.Lerp(rb.velocity, speed * tarDir, 0.2f);
+            }
+            else if (isFirst)
+            {
+                Vector3 tarDir = (trackTarget.beSearchTrigger.transform.position - transform.position).normalized;
+                tarDir.z = 0;
+                transform.right = -tarDir;
+                rb.velocity = speed * tarDir;
+                isFirst = false;
+            }
         }
     }
 
-    public void BeShoot(Character own, Vector3 shootPos, Vector3 dir, int dmg, float fc, bool hurt, float repel, bool track = false, Character target = null)
+    public void BeShoot(Character own, Vector3 shootPos, Vector3 dir, int dmg, float fc, bool hurt, float repel, bool aim = false, bool alwaysTrack = false, Character target = null)
     {
         transform.position = shootPos;
         transform.right = -dir;
@@ -140,15 +118,14 @@ public class Bullet : MonoBehaviour
         changeHurt = hurt;
         repelValue = repel;
         rb.velocity = dir * speed;
-        isTrack = track;
+        isTrack = aim;
+        canAlwaysTrack = alwaysTrack;
         trackTarget = target;
         flyTime = 0;
-        //curDir = dir;
     }
 
     private void OnTriggerEnter(Collider other)
     {
-
         if (isGetTarget || isInVain)
         {
             return;
@@ -161,16 +138,6 @@ public class Bullet : MonoBehaviour
             gameObject.SetActive(false);
             return;
         }
-        //回旋镖
-        //if (other.GetComponentInParent<Character>() == owner)
-        //{
-        //    if (hasBack)
-        //    {
-        //        isGetTarget = true;
-        //        gameObject.SetActive(false);
-        //        return;
-        //    }
-        //}
         BeHitTrigger hitTrigger = other.GetComponent<BeHitTrigger>();
         if (hitTrigger != null)
         {

+ 3 - 2
ActionTowerDefense/Assets/Scripts/Character.cs

@@ -138,7 +138,8 @@ public class Character : MonoBehaviour
     public AttackType attackType;               //攻击类型
     public GameObject bulletPrefab;             //远程攻击的子弹
     public List<Transform> shootPos;            //远程攻击的子弹发射位置
-    public bool shootTrack = false;             //远程攻击是否追踪目标
+    public bool shootTrack = false;             //远程攻击是否初始时瞄准目标
+    public bool shootAlwaysTrack = false;       //远程攻击是否始终追踪
     public List<AttackInfo> Attack_summonInfos;       //普攻1信息(出场攻击)
     public List<AttackInfo> Attack_marchInfos;       //普攻2信息
     public List<AttackTrigger> attackTriggers;  //普攻触发器,敌方进入后播放动画进行攻击
@@ -328,7 +329,7 @@ public class Character : MonoBehaviour
         {
             bullet.canTransmit = true;
         }
-        bullet.BeShoot(this, shootPos[shootId].position, attackDir, attackInfo.damage, attackInfo.force, attackInfo.changeHurt, attackInfo.repelValue, shootTrack, attackTarget ? attackTarget : null);
+        bullet.BeShoot(this, shootPos[shootId].position, attackDir, attackInfo.damage, attackInfo.force, attackInfo.changeHurt, attackInfo.repelValue, shootTrack, shootAlwaysTrack, attackTarget ? attackTarget : null);
     }
 
     public virtual Vector3 GetMoveDir()