こんにちわ、SAT-BOXのペンギンです
今日はちょっとしたUnity知識を紹介したいと思います。
Unityでゲームを作っている時に、フィールドに沿ってコライダーを作りたい時ってありませんか?
例えば扇形のフィールドがあるとします。

・posListには、座標をいれておきます
(手動で設定しても良いですが、今回はあらかじめ計算していれてあります)
・colPrefには、コライダー生成用のGameObjectです(非アクティブ)
・colRootには、生成したコライダーを格納する親を設定します

こんな感じに外周にコライダーを配置したい・・・

そこで下記 MakeCollider() を実行すれば、外周にコライダーが作られます!
プログラムはこんな感じです。
//座標リスト
private List<Vector3> posList = new List<Vector3>();
[SerializeField, Header("コライダープレハブ")]
private GameObject colPref;
[SerializeField, Header("生成したコライダーを格納するルート")]
private Transform colRoot;
public void MakeCollider()
{
Vector3 vec;
GameObject colObj;
for (int i = 0; i < posList.Count - 1; i++)
{
//コライダーを生成
colObj = Instantiate(colPref, colRoot);
//コライダーの座標を設定
colObj.transform.position = posList[i];
//次のコライダーの方向を取得
vec = posList[i + 1] - posList[i];
//取得した方向を向かせる
colObj.transform.LookAt(posList[i] + vec);
//コライダーの位置の補正
colObj.transform.position += -colObj.transform.right * 0.55f;
//次のコライダーまでの距離の半分だけZ座標を移動させる
colObj.transform.position += colObj.transform.forward * (vec.magnitude / 2.0f);
//ScaleのZ軸を次のコライダーの距離分にする
colObj.transform.localScale =
new Vector3
(
colObj.transform.localScale.x,
colObj.transform.localScale.y,
colObj.transform.localScale.z * vec.magnitude
);
//生成したコライダーをアクティブ状態にする
colObj.SetActive(true);
}
}
今回みたいに曲線に沿ってコライダーを作りたいときとかに便利ですね!
(もっと便利なものがあるかもしれませんが...)
では。