Как пули НЕ следуют за объектом в единстве - PullRequest
0 голосов
/ 01 сентября 2018

Когда я стреляю в свою пулю, она преследует врага. Я хочу иметь прицельную систему, например, пуля должна идти в позицию противника, когда она была впервые замечена (не преследуя объект, просто стрелять в первую позицию, в которой был замечен враг). Это мой код, и он заставляет пулю следовать за врагом:

 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 голосов
/ 01 сентября 2018

Заменить

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;

Таким образом, вы вычисляете и копируете существующую целевую позицию в Seek и заставляете пулю лететь в эту позицию, даже если фактическая цель удаляется. Код, который вы фактически заняли текущую целевую позицию каждый раз, когда вызывалось обновление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...