Траектория снаряда слегка отклонена от Unity2D - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть простая пушка, которую я пытаюсь запрограммировать, чтобы стрелять снарядом.У меня есть 4 игровых объекта:

  • Объект-танк
  • A Pivot Object (дочерний элемент танка)
  • A Cannon Object (дочерний элемент Pivot)
  • Пустой GameObject с именем Tip, который находится чуть выше пушки (потомка пушки)

Мой код для объекта пушки приведен ниже:

public class cannon: MonoBehaviour
{ 
    public float power = 1.0f;
    public Transform projectile;

    void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            Transform bullet;
            Vector2 pos = transform.GetChild(0).position;
            bullet = Instantiate(projectile, pos, Quaternion.identity);
            Rigidbody2D bullet_rb = bullet.GetComponent<Rigidbody2D>();
            bullet_rb.AddForce(pos * power);
        }
    }
}

Кажется, все работает нормальноДо тех пор, пока я не посмотрел на траекторию снаряда, когда пушка направлена ​​прямо вдоль оси X.В приложенной силе все еще есть небольшой компонент y, которого я не ожидал и не желал.

Вот изображение:

enter image description here

Что может быть причиной такого поведения?

1 Ответ

0 голосов
/ 26 февраля 2019

Сила, которую вы добавляете, равна pos (умножается на скаляр power) ... Позиция вашей пушки выше нуля на оси y, поэтому она запускается со смещением y.Я предполагаю, что у него тоже есть смещение по оси x, но оно менее заметно, потому что основание (tank) центрировано в точке x, а над центром в точке y.Попробуйте отодвинуть весь танк от корня сцены;вы, вероятно, увидите огромный всплеск силы снаряда из-за этой ошибки использования pos.

. Вместо этого вам нужен вектор, представляющий чистое направление .Тот, который также нормализован (величина равна единице).В этом случае либо right (вперед на 2d), либо up с точки зрения вращающегося tip или cannon.

...