|
|
@@ -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)
|
|
|
{
|