こんにちわ、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); } }
今回みたいに曲線に沿ってコライダーを作りたいときとかに便利ですね!
(もっと便利なものがあるかもしれませんが...)
では。