Unityを使用して、弾を発射するオブジェクトを作りましたが、弾は直線的にしか飛んでいません。放物線を描くようにするにはどうすればよいですか?現在のコードは以下のような感じです。どのように変更すれば実現できるかご教示いただけますか?

弾が直線的にしか飛ばないのは、発射時の速度ベクトルにx軸方向のみの値が与えられているからです。放物線を描くためには、y軸方向の速度成分も考慮する必要があります。

以下の手順を実行することで、放物線を描くように弾を発射することができます。

1. 弾の初速度を速度ベクトルとして定義します。速度ベクトルは、x軸方向の速度成分とy軸方向の速度成分からなる2次元のベクトルです。

2. 弾の初速度の大きさ(Magnitude)を決定します。この大きさは、弾の速度や放物線の形状を調整するためのパラメータです。

3. 弾の発射角度を決定します。この角度は、弾が放物線を描く方向を指定するために使用されます。

4. 弾の初速度ベクトルを、発射角度と速度の大きさから計算します。具体的には、初速度のx軸方向の成分は速度の大きさに cos(発射角度) をかけ、y軸方向の成分は速度の大きさに sin(発射角度) をかけます。

5. 弾の発射時に計算した初速度ベクトルを適用します。具体的には、弾の Rigidbody コンポーネントに対して AddForce() メソッドを使用して初速度ベクトルを与えます。

以下に、変更点が加わったコードの一例を示します。

“`csharp
using UnityEngine;

public class Shot : MonoBehaviour
{
public float speed = 5f; // 弾の速度
public float angle = 30f; // 弾の発射角度(度数法)

private Rigidbody rb;

void Start()
{
rb = GetComponent();
Shoot();
}

void Shoot()
{
float radian = angle * Mathf.Deg2Rad; // 角度をラジアンに変換
float vx = speed * Mathf.Cos(radian); // x軸方向の速度成分
float vy = speed * Mathf.Sin(radian); // y軸方向の速度成分

Vector3 velocity = new Vector3(vx, vy, 0f);

rb.AddForce(velocity, ForceMode.VelocityChange);
}
}
“`

このコードでは、弾の初速度を速度と角度から計算し、Rigidbody の AddForce() メソッドを使用して初速度を適用しています。この変更により、弾は放物線を描いて飛ぶようになります。

必要に応じて、speed パラメータと angle パラメータを調整して、弾の速度と放物線の形状を調整してください。

コメントを残す