如何将不跟随对象的项目符号统一起来

时间:2018-09-01 09:52:05

标签: unity3d

当我发射子弹时,它会追击敌人。我想要一个瞄准系统 例如,子弹应该在第一次被看见时就到达敌人的位置(不追赶物体,只是向看到敌人的第一位置射击)。 这是我的代码,它使子弹跟随敌人:

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

有什么主意吗?

1 个答案:

答案 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;

这样,即使实际目标移开了,您也可以计算并复制“搜索”中的现有目标位置,并使子弹飞到该位置。每次调用此更新时,您实际上已经占据了当前目标位置的代码。