Long-Slow-Distance

Programming Notes with Unity

メニュー

Colliderの当たりのサイズをスケーリング込みの値で取得する方法

2Dのゲームで当たり判定を行う時、BoxCollider2DやCircleCollider2Dを
よくゲームオブジェクトにアタッチしてサイズ調整をするが、
Inspectorで表示されている当たりのサイズはオブジェクト自体のスケールの影響を受けない。

160411_get_col_size_1

親オブジェクトのスケールを変更すると、実際の見た目の当たりサイズも変更されるので
便利(というか当たり前)なのだが、このスケールの影響を受けた後のサイズをプログラムで取得する方法が
ちゃんと用意されている。

それは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が存在する。上手く使うと少しラクが出来る。

関連記事