Случайная позиция огня между точками (устанавливается из направления и точки вектора) - PullRequest
0 голосов
/ 08 мая 2018

Это мой первый вопрос здесь.
Для моего кода оружия в моем 2D-шутере у меня есть вектор направления, сформированный между двумя точками (Base и Emitter) и точкой (C), где я помещаю прицел винтовки.

Я пытаюсь реализовать своего рода точный конус (случайный выстрел между двумя точками, равноудаленный от точки C, образующей перпендикулярную линию к вектору направления)

Вот схема:

enter image description here

Положение точек L и R еще не определено. Мне нужна помощь для:

  • Определить положение L и R с учетом вектора расстояния (база-эмиттер) и C
  • Случайная точка между L и R

Я безуспешно пытался, поэтому прошу помощи. Заранее спасибо. Привет

1 Ответ

0 голосов
/ 11 мая 2018

Я приведу немного упрощенного примера. Предполагается, что при запуске пули она будет двигаться в произвольном направлении внутри заранее заданного конуса.

Public GameObject bulletPrefab;
Public GameObject pointOnGunBulletShootsFrom; // In your image this would be the emitter
private float halfAngleofCone = 30f; // In your image this would be the distance between C and L.
private float bulletSpeedModifier = 100f; // If you have another way of propelling your bullets you can remove this and the addforce section.

private void FireBulletInsideCone()
{
   GameObject bullet = Instantiate(bulletPrefab, pointOnGunBulletShootsFrom.transform.position, pointOnGunBulletShootsFrom.transform.rotation);
   float angleToAdjustBy = Random.Range(0,halfAngleofCone);
   bullet.transform.Rotate(Vector3.up * angleToAdjustBy );
   bullet.rigidbody.AddForce(transform.forward * bulletSpeedModifier);
}

void Update()
{
    if(Input.GetKeyDown(KeyCode.Space))
    {
       FireBulletInsideCone();
    }
}

Вот изображение того, как вам, возможно, придется настроить свой пистолет. Чтобы держать вещи в чистоте, вы можете добавить игровой объект на передней части пистолета, чтобы он выступал в роли GameObject pointOnGunBulletShootsFrom что скрипт использует. В вашем случае это может быть учтено вашим эмитентом. enter image description here

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