|
|
@@ -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));
|
|
|
}
|
|
|
}
|
|
|
|