バスケ好きエンジニアのブログ

バスケの事はそんなに書いてません

Unity の Collider2D の移動が重い

Unity で横スクロールゲームを作ってる時に Collider2D を適用したオブジェクトを大量にだすと重くなってきたので調べてみた。

原因としては Collider2D を適用したオブジェクトを transform.position で動かすと新しいポジションにした時に Collider2D の破棄と再生成をするというもの。 なので基本的な解決策としては Rigidbody2D を割り当てて rigidbody.MovePosition で移動するというものがある。これだと破棄と再生成は行わない。 今回はそれ以外にも親オブジェクトを動かしていたため rigidbody.MovePosition をしたら子オブジェクトが動かない問題というのがでてきたので上記の手法が全てに使えるわけでなはなかった。

なので Awake で生成した時に collider2d.enabled = false; でコライダーを動かさずに、OnVecameVisible() でオブジェクトがカメラ内にはいったらコライダー復活させるようにした。カメラ外で反応しない事に問題はなかったので。 これで大体2倍くらいパフォーマンスに変化があった。

ビフォアー

f:id:topspot:20140813140034p:plain

アフター

f:id:topspot:20140813140050p:plain