【Unity】初速と発射角を与えて、放物線を描くように球を発射

大砲から発射された球が放物線を描くようにするには、発射角度や初速度、重力などを考慮した計算を行い、発射した球に対して継続的に力を加える必要があります。

以下は、Unityで放物線を描くようにしたい場合のコードの説明です。

まず、発射する角度と初速度を計算する必要があります。これには、以下の式を使用します。

vx = speed * Mathf.Cos(angle * Mathf.Deg2Rad);
vy = speed * Mathf.Sin(angle * Mathf.Deg2Rad);

ここで、vxは水平方向の速度、vyは垂直方向の速度、speedは初速度、angleは発射角度を示します。Mathf.CosとMathf.Sinは、Unityに搭載されている数学関数です。

次に、球に対して継続的に力を加えるために、FixedUpdateメソッド内で繰り返し処理を行います。以下のコードでは、ballRigidbodyという名前のRigidbodyコンポーネントを持つオブジェクトに対して、重力と放物運動による力を加えています。

private Rigidbody ballRigidbody;
private Vector3 initialVelocity;   // 初速度

void Start()
{
    ballRigidbody = GetComponent<Rigidbody>();
    float angle = 45f;             // 発射角度(ここでは45度)
    float speed = 10f;             // 初速度(ここでは10m/s)
    float vx = speed * Mathf.Cos(angle * Mathf.Deg2Rad);
    float vy = speed * Mathf.Sin(angle * Mathf.Deg2Rad);
    initialVelocity = new Vector3(vx, vy, 0f);
}

void FixedUpdate()
{
    Vector3 gravity = new Vector3(0f, -9.8f, 0f);  // 重力
    ballRigidbody.AddForce(gravity, ForceMode.Acceleration);
    ballRigidbody.AddForce(initialVelocity, ForceMode.VelocityChange);
}

上記のコードでは、Startメソッド内で初速度を計算し、initialVelocityという変数に格納しています。そして、FixedUpdateメソッド内で、重力を加えるためにAddForceメソッドを使用してgravityを加え、放物運動による力を加えるためにinitialVelocityを加えています。ここで、ForceMode.AccelerationとForceMode.VelocityChangeは、それぞれ加速度と速度を加える方法を指定する引数です。

以上が、Unityで放物線を描くようにしたい場合のコードの説明です。ただし、このコードは単純な例であり、実際には発射角度や初速度、重力などを調整する必要がある場合があります。

Unity

Posted by hidepon