【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で放物線を描くようにしたい場合のコードの説明です。ただし、このコードは単純な例であり、実際には発射角度や初速度、重力などを調整する必要がある場合があります。
ディスカッション
コメント一覧
まだ、コメントがありません