Colliderの当たりのサイズをスケーリング込みの値で取得する方法
2Dのゲームで当たり判定を行う時、BoxCollider2DやCircleCollider2Dを
よくゲームオブジェクトにアタッチしてサイズ調整をするが、
Inspectorで表示されている当たりのサイズはオブジェクト自体のスケールの影響を受けない。
親オブジェクトのスケールを変更すると、実際の見た目の当たりサイズも変更されるので
便利(というか当たり前)なのだが、このスケールの影響を受けた後のサイズをプログラムで取得する方法が
ちゃんと用意されている。
それはboundsプロパティのsizeだ。
var col = GetComponent<BoxCollider2D>(); // Inspectorに表示されるスケールの影響を受けない絶対サイズ Debug.Log( col.size.x ); // スケール後の当たり判定サイズ Debug.Log( col.bounds.size.x );
当たり判定をMonoBehaviourのOnTrigger〜やOnCollision〜といったコールバックに任せずに
自前で行う際に、とりあえず何もかも自前でやるのはめんどくさいのでゲームオブジェクトにColliderを付けて
それらを管理しながらUnityの当たり判定用APIを使っていたのだが、
最初boundsの存在を知らなかったのでそのままsizeとスケールを掛け合わせたものを使っていた。
BoxCollider2DもCircleCollider2Dも、Collider2Dクラスがベースなので
両方共bounds.sizeが存在する。上手く使うと少しラクが出来る。