選択オブジェクト全体を採寸するスクリプト
- BTA(Kelorin Jo)
- 2019年12月18日
- 読了時間: 2分
エディタ拡張などで3Dオブジェクトを隙間なく並べるには、ます寸法を知る必要がありますが
RenderからBoundsで取得できます
しかし幅をカスタムするまで考えると、ボックスコライダーあったほうが便利だなということで
オブジェクトを採寸してぴったりサイズのボックスコライダーを作るというコードを書きました

採寸するコードとボックスコライダーを後から生成するコード、2つ合わさった記事が見つからなかったのでここに記します。
親オブジェクトだけでなく子オブジェクトまで調べて全体の寸法です。
(普通にボックスコライダーをアタッチではそのオブジェクトの寸法しかとらない)
(孫オブジェクトまでは判定してません)
アタッチして実行するとコライダーが作られます。(エディタ拡張ではないです)
。
2017.4,2018.4,2019.2で動作確認
注意点
前回の整列させるスクリプトもですが、
内部ではまずオブジェクトを原点に移動して回転スケールをリセットしてから採寸、ボックスコライダーをアタッチしてから元の位置に戻すということをしてます。
この方法だと、staticにしてあるオブジェクトは動かせないので正確に採寸できません。staticをオフにする必要があります。(移動させずに採寸するのは超難しい)

昭和町や村のモデルは全部staticにしちゃってたわあ…
参考にした記事 https://forum.unity.com/threads/getting-the-bounds-of-the-group-of-objects.70979/ https://docs.unity3d.com/ScriptReference/GameObject.AddComponent.html
苦しんだポイント
ボックスコライダーをアタッチする正しい構文が
var bc = gameObject.AddComponent<BoxCollider>() as BoxCollider; gameObject.AddComponent<までが定型文と知らず必死でthis.AddComponent<で通そうとして6時間も… 取得するGetComponentのほうは、this.GetComponent<>()で通るのに… 自分でなく別のゲームオブジェクトにアタッチする場合は、 TargetGameObject.gameObject.AddComponent<みたいに書きます。ゲームオブジェクトがかぶってるやんけ