当我发射子弹时,它会追击敌人。我想要一个瞄准系统 例如,子弹应该在第一次被看见时就到达敌人的位置(不追赶物体,只是向看到敌人的第一位置射击)。 这是我的代码,它使子弹跟随敌人:
void shoot() {
GameObject bulletGO=(GameObject) Instantiate(BulletPrefab, firepoint.position, firepoint.rotation);
Bullet bullet = bulletGO.GetComponent<Bullet>();
if (bullet != null) {
bullet.Seek(target);
}
和:
private Transform target;
public float speed = 5f;
public GameObject ImpactEffect;
public void Seek(Transform _target) {
target = _target;
}
// Update is called once per frame
void Update () {
if (target == null)
{
Destroy(gameObject);
return;
}
Vector3 dir = target.position - transform.position;
float distancethisframe = speed * Time.deltaTime;
if (dir.magnitude <= distancethisframe)
{
HitTarget();
return;
}
transform.Translate(dir.normalized * distancethisframe, Space.World);
}
有什么主意吗?
答案 0 :(得分:1)
替换
private Transform target;
//...
public void Seek(Transform _target) {
target = _target;
}
//...
Vector3 dir = target.position - transform.position;
使用
private Vector3 target;
//...
public void Seek(Transform _target) {
target = _target.position;
}
//...
Vector3 dir = target - transform.position;
这样,即使实际目标移开了,您也可以计算并复制“搜索”中的现有目标位置,并使子弹飞到该位置。每次调用此更新时,您实际上已经占据了当前目标位置的代码。