Ракеты имеют странное направление

Странное поведение, когда мой космический корабль запускает несколько ракет, чтобы уничтожить врага. При определенных обстоятельствах ракеты "прыгают" и отлетают. Похоже, это происходит, когда ближайший враг уничтожен одной ракетой, а все остальные больше не имеют цели. Затем они "прыгают" и улетают (за пределы экрана).

Я до сих пор не знаю причину этой проблемы, поэтому, пожалуйста, может кто-нибудь помочь мне с этим видом "ошибки"? ТИА

void Start () {
    rb = this.GetComponent<Rigidbody2D>();

    nearestEnemy = FindClosestTarget("EnemyShipTag");
}

получение ближайшей цели (врага)

GameObject FindClosestTarget(string _target) {

    enemies = GameObject.FindGameObjectsWithTag(_target);

    closest = null;

    distance = Mathf.Infinity;

    _position = this.transform.position;

    foreach (GameObject enemy in enemies) {

        diff = enemy.transform.position - _position;

        curDistance = diff.sqrMagnitude;

        if (curDistance < distance) {
            closest = enemy;
            distance = curDistance;
        }
    }

return closest;

}

рассчитать движение до ближайшего врага, если NevidEnemy не нуль

void FixedUpdate () {


    if (nearestEnemy != null) {//is enemy available?

        Vector2 enemyTarget = nearestEnemy.transform.position;
        Vector2 direction = (Vector2)enemyTarget - rb.position;

        direction.Normalize ();

        float rotateAmount = Vector3.Cross (direction, transform.up).z;

        rb.angularVelocity = -rotateAmount * rotateSpeed;

        float speed = 6f;

        float step = speed * Time.deltaTime;

        transform.position = Vector3.MoveTowards(transform.position, nearestEnemy.transform.position, step);

    } else {
        //rocket shall fly straight ahead if there's no target
        rb.velocity = transform.up * speed;
}

эти функции являются частью скрипта EnemyControl.cs

void OnTriggerEnter2D (Collider2D col) {//this function will trigger when there is a collision of our game objects
    //detect collision of the enemy ship with the player ship, or with a player's bullet
    if ((col.tag == "PlayerShipTag") || (col.tag == "MissileUpgradeTag")) {
    EnemyDestroyed ();
}

void EnemyDestroyed () {

Destroy (gameObject);//Destroy the enemy ship

        dead = true;

        PlayerControl.enemiesDestroyed++;


}

missile_direction

0 ответов

Другие вопросы по тегам