Как сделать изогнутую траекторию полета? - PullRequest
0 голосов
/ 22 марта 2020

Как заставить пулю лететь в ар c при стрельбе и поразить игрока. Как на этой картинке. Я пытался использовать формулы из физики, тело брошено под углом к ​​горизонту, вот что из этого вышло. Но пуля улетает в пустоту

velocity = Mathf.Round(Vector3.Distance(lastpos, transform.position) / Time.deltaTime);
lastpos = transform.position;
Vector3 direction = PlayeCar.position - Vector3.zero;
float angle = Mathf.Atan2(direction.y, direction.x); // радианы


float x = velocity * Mathf.Cos(angle) + gravity * (time* time) / 2;
float y = velocity * Mathf.Sin(angle);

transform.position = new Vector2(x, y)

; enter image description here

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Примерный метод ориентации может быть (сценарий будет прикреплен к оружию, которое стреляет, поэтому, когда код ссылается на преобразование, ссылается на преобразование оружия):

 public void LaunchTarget()
{
    Vector3 initialSpeed = transform.forward; //shot direction, gun's forward
    GameObject go = GameObject.Instantiate(m_bullet);//reference to bullet prefab

    //in case you need to randomize the shot speed
    initialSpeed = transform.forward * Random.Range(m_minLaunchSpeed, m_maxLaunchSpeed); 

    //set the initial position of the bullet in the gun
    go.transform.position = transform.position;
    // shoot (give speed to the bullets rigidbody)
    go.GetComponent<Rigidbody>().velocity = initialSpeed;
    //initially disabled soas to see the bullet when shot
    go.SetActive(true);
}

Надежда, которая помогает

0 голосов
/ 22 марта 2020

Я сделал это !!!! во время полета пули я периодически переворачиваю его на игрока. И через некоторое время я удаляю его

   void Start()
    {
        rigidbodyBullet = GetComponent<Rigidbody2D>();
        Player = GameObject.Find("carPlayer").GetComponent<Transform>();
        _distance = Vector3.Distance(Player.position, transform.position);
        Invoke("DestroyArcBullet", 1.5f);
        limitDistance = _distance / 1.3f;
    }


    void Update()
    {
        transform.position += transform.up * Time.deltaTime * 5f;
        _distance = Vector3.Distance(Player.position, transform.position);


        if (_distance < limitDistance)
        {
            var turn = Quaternion.Lerp(transform.rotation,
                Quaternion.LookRotation(Vector3.forward, Player.position - transform.position), Time.deltaTime * 2);
            rigidbodyBullet.MoveRotation(turn.eulerAngles.z);
        }


        if (this.transform.position.y + this.transform.position.y <= -10 || this.transform.position.y + this.transform.position.y >= 10
            || this.transform.position.x + this.transform.position.x <= -10 || this.transform.position.x + this.transform.position.x >= 10)
        {
            Destroy(gameObject);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...