Ракеты имеют странное направление - PullRequest
0 голосов
/ 13 ноября 2018

Странное поведение, когда мой космический корабль запускает несколько ракет, чтобы уничтожить врага. При определенных обстоятельствах ракеты «прыгают» и улетают.

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

Я до сих пор не знаю причину этой проблемы.

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;

}

Рассчитать движение к ближайшему врагу, если ближайший враг не равен нулю

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

...