@Gera01
Unity, С# и больше ничего.

Как расчитать силу к которой приложить стрелу, чтобы она попала?

Есть:
using UnityEngine;

public class Bow : AWeapon
{
    public Transform arrowSpawnPoint;
    public GameObject arrowPrefab;
    public float shootMaxPower;


    public virtual float Damage
    {
        get;
        private set;
    }

    public void Shoot()
    {
        GameObject arrow = Instantiate(arrowPrefab, arrowSpawnPoint.position, arrowSpawnPoint.rotation);
        arrow.GetComponent<Rigidbody>().AddForce(shootMaxPower* GetWeaponOwner().transform.forward, ForceMode.Force);

        Arrow arrow_cs = arrow.GetComponent<Arrow>();
        arrow_cs.weaponOwner = weaponOwner;
        arrow_cs.Damage = Damage;
    }
}

И пока лук стреляет, придавая стреле максимальную скорость. Но если цель стоит ниже, то нужно задавать не максимальную скорость, а ту, которая при ее потери прилетит в цель. Как расчитать эту силу?
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ответы на вопрос 1
ShockWave2048
@ShockWave2048
imposter
Есть такая формула расчета баллистической траектории, без учета сопротивления среды, только гравитация. Всегда ей пользуюсь.
Vector3 BallisticVel(Vector3 target, Vector3 source, float angle)
{
        var dir = target - source;  // get target direction
        var h = dir.y;  // get height difference
        dir.y = 0;  // retain only the horizontal direction
        var dist = dir.magnitude;  // get horizontal distance
        var a = angle * Mathf.Deg2Rad;  // convert angle to radians
        dir.y = dist * Mathf.Tan(a);  // set dir to the elevation angle
        dist += h / Mathf.Tan(a);  // correct for small height differences
        // calculate the velocity magnitude
        var vel = Mathf.Sqrt(dist * Physics.gravity.magnitude / Mathf.Sin(2 * a));
        var res = vel * dir.normalized;
        if (float.IsNaN(res.x)) res = new Vector3(); // Set zero if vector NaN.
        return res;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы