【最適化】簡単に衝突を減らして処理を軽くする方法

LayerCollisionMatrix Unity
スポンサーリンク

前書き

ゲームを作っていくうえで避けては通れないのが「最適化」になります。
どんなにいいゲームを作ったとしても処理が重くなるとストレスがたまってしまい、プレイが台無しになることも多々あると思います。

いきなり処理を軽くすることを目的とした実装を考えると大変なので、こういう方法もあるんだなーぐらいの気持ちで見ていただけるといいかなと思います。

衝突を減らす方法

アイテムを準備する

今回はプレイヤーが拾えるアイテム「YellowCoin」を準備します。
この時のLayerを「PlayerOnly」として新しくLayer作成し、設定しています。

YellowCoinのLayer

Physics 2DのLayer Collision Matrixを編集する

Edit->Project Settings->Phaysics 2DからLayer Collision Matrixを見ることができます。

新しくLayerを作るとマトリクスにチェックが入っていないので、”PlayerOnly”のLayer Collision Matrixのうち”Player”と”Enemies”にチェックを付けます。
# 今回はTopDown Engineで適応されている”Layer Collision Matrix”を表示していますが、それぞれ自分の環境で読み替えてみてください。

Physics2Dの設定

この状態になるとLayerが”PlayerOnly”のアイテムはLayerが”Player”と”Enemies”になっているオブジェクトに対して衝突するようになります。

実際にアイテムを生成して動かしてみる。

YellowCoinが大量に落ちている状態で敵(Enemies)が増えているとYellowCoinと敵(Enemies)が大量に接触することで画面左下のFPSが一桁台(6)まで落ち込みました。

Physics 2DのLayer Collision Matrixを見直してみる

YellowCoinはプレイヤーのためのアイテムであるため、無駄に”Enemies”とYellowCoinを衝突させる意味はありませんでした。そのため、Layer Collision Matrixで設定した”Player”と”Enemies”のうち”Enemies”はなくてもいいと分かります。PlayerOnlyと衝突するのを”Player”のみにしてみましょう。

LayerCollisionMatrix

Physics 2DのLayer Collision Matrixを見直して動かしてみる

Layer Collision Matrixを直した状態で動かしてみました。
大量の敵(Enemies)が出現していますが、YellowCoinとの接触はしていません。
FPSは30前半まで落ち込みますが、修正前と比較して一桁になることはありませんでした。

Profilerを見てみると

Unityエディタ内で実行中のゲームやアプリケーションのパフォーマンスを詳細に分析するためのツールとしてProfilerという機能があります。Profilerを使用することで、どの部分が遅いのか、どのメソッドが多く呼び出されているのかなど、パフォーマンスのボトルネックを特定して最適化することができます。

Profilerを見てるとオレンジ色の部分が”物理演算”になって、大量のデータ処理に使われていることが分かります。Physics 2DのLayer Collision Matrixを見直すことでオレンジ色の部分を最適化することができます。

ゲームの作りによって”物理演算”以外にも”Script”や”Rendering”など重たくなる要素はたくさんあるのでゲームが重たいと思ったらProfilerを見直してみるのもいいかもしれません。

まとめ

今回はPhysics 2DのLayer Collision Matrixについて紹介しました。

最適化の方法はいろいろありますが、個人的に処理が重たくなるのは物理演算(Physics)系だと思います。
手っ取り早く物理演算を軽くする方法としてPhysics 2DのLayer Collision Matrixで「特定のLayerはそもそも衝突させない」方法を取りました。ほかにもColliderの設定を変えるなど最適化にはいろいろとやり方があるため作成しているゲームに対応した最適化をしてみるのがいいかなと思います。

コメント

タイトルとURLをコピーしました