浏览代码

子弹消失特效&子弹击中目标时特效位置为击中点

SZAND\msx_2 5 月之前
父节点
当前提交
f05b5d5902
共有 1 个文件被更改,包括 25 次插入4 次删除
  1. 25 4
      ActionTowerDefense/Assets/Scripts/Bullet.cs

+ 25 - 4
ActionTowerDefense/Assets/Scripts/Bullet.cs

@@ -8,7 +8,9 @@ public enum BulletType
     Single = 0,             //单体目标,触发后即销毁
     Penetrate = 1,          //穿透,可击中多个目标
     Bomb = 2,               //击中目标后爆炸
+    Boomerang = 3,          //回旋镖
 }
+
 public class Bullet : MonoBehaviour
 {
     [Header("是否留下箭种")]
@@ -35,6 +37,10 @@ public class Bullet : MonoBehaviour
 
     [Header("击中特效")]
     public GameObject effect;
+    private Vector3 effectPos;
+
+    [Header("消失特效")]
+    public GameObject disappearEffect;
 
     [Header("传送门")]
     public bool canTransmit;            //子弹是否能被传送门传送
@@ -69,6 +75,7 @@ public class Bullet : MonoBehaviour
         if (flyTime >= maxFlyTime)
         {
             isGetTarget = true;
+            DisappearEffect();
             gameObject.SetActive(false);
             return;
         }
@@ -106,6 +113,11 @@ public class Bullet : MonoBehaviour
         attackInfo = own.attackController.attackInfo;
     }
 
+    private void GetEffectPos(Collider other)
+    {
+        effectPos = other.bounds.ClosestPoint(transform.position);
+    }
+
     private void OnTriggerEnter(Collider other)
     {
         if (isGetTarget || isInVain)
@@ -143,7 +155,7 @@ public class Bullet : MonoBehaviour
                                 hitTrigger.owner.isBeHitBySummonAttack = false;
                             }
                             hitTrigger.BeHit(attackInfo, owner);
-                            BeHitEffect(hitTrigger);
+                            BeHitEffect(other, hitTrigger);
                             if (hitTrigger.owner.debugAttackFrom)
                             {
                                 hitTrigger.owner.DebugAttackFrom(owner.name, attackInfo.damage);
@@ -183,7 +195,7 @@ public class Bullet : MonoBehaviour
                                 hitTrigger.owner.isBeHitBySummonAttack = false;
                             }
                             hitTrigger.BeHit(attackInfo, owner);
-                            BeHitEffect(hitTrigger);
+                            BeHitEffect(other, hitTrigger);
                             if (hitTrigger.owner.debugAttackFrom)
                             {
                                 hitTrigger.owner.DebugAttackFrom(owner.name, attackInfo.damage);
@@ -199,11 +211,20 @@ public class Bullet : MonoBehaviour
         }
     }
 
-    private void BeHitEffect(BeHitTrigger bht)
+    private void BeHitEffect(Collider other, BeHitTrigger bht)
     {
         if (effect)
         {
-            Instantiate(effect, bht.owner.bodyTrans.position, new Quaternion(0, 0, 0, 0), bht.owner.bodyTrans);
+            GetEffectPos(other);
+            Instantiate(effect, effectPos, new Quaternion(0, 0, 0, 0), bht.owner.bodyTrans);
+        }
+    }
+
+    private void DisappearEffect()
+    {
+        if (disappearEffect)
+        {
+            Instantiate(disappearEffect, transform.position, new Quaternion(0, 0, 0, 0));
         }
     }