Unity: Как применить вращение к скорости объекта? - PullRequest
0 голосов
/ 27 июня 2018

Я делаю шутер сверху вниз на Unity, и мне нужно реализовать дробовик, который будет выпускать 5 выстрелов за раз, каждый следующий будет иметь поворот на 10 градусов меньше, чем предыдущий (от 20 до -20 в общей сложности). При создании пули на огневой точке скорость применяется к ней при помощи скрипта пули, прикрепленного к сборному пулю. Я также применяю вращение в методе создания экземпляра, но пуля вращается вокруг себя, а не в направлении полета. Код стрельбы:

Vector2 mouseScreenPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 direction = (mouseScreenPosition - (Vector2) transform.position).normalized;
transform.up = direction;

GameObject newBullet1 = Instantiate(bullet, firePoint.position, Quaternion.Euler(0f, 0f, 20f)) as GameObject;
newBullet1.GetComponent<Bullet>().direction = direction;
GameObject newBullet2 = Instantiate(bullet, firePoint.position, Quaternion.Euler(0f, 0f, 10f)) as GameObject;
newBullet2.GetComponent<Bullet>().direction = direction;

код пули:

public Vector3 direction;
public float bulletSpeed;

void Update () {
    GetComponent<Rigidbody2D>().velocity = new Vector3 (direction.x, direction.y, transform.position.z) * bulletSpeed;
}

1 Ответ

0 голосов
/ 27 июня 2018

Вам необходимо применить вращение к вектору направления для каждой пули. Формула для вращения вектора ... x1 = x0 * cos (угол) - y0 * sin (угол); y1 = x0 * sin (угол) + y0 * cos (угол);

    Vector2 direction10 = new Vector2(direction.x*Mathf.cos(10*Mathf.Deg2Rad) - direction.y*Mathf.sin(10*Mathf.Deg2Rad), direction.x*Mathf.sin(10*Mathf.Deg2Rad) + direction.y*Mathf.cos(10*Mathf.Deg2Rad));
    Vector2 direction20 = new Vector2(direction.x*Mathf.cos(20*Mathf.Deg2Rad) - direction.y*Mathf.sin(20*Mathf.Deg2Rad), direction.x*Mathf.sin(20*Mathf.Deg2Rad) + direction.y*Mathf.cos(20*Mathf.Deg2Rad));

    newBullet2.GetComponent<Bullet>().direction = direction10;
    newBullet3.GetComponent<Bullet>().direction = direction20;
    ... //etc

Скорее всего, это можно сделать с помощью петли.

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