弾が直線的にしか飛ばないのは、発射時の速度ベクトルに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 パラメータを調整して、弾の速度と放物線の形状を調整してください。