プロファイラに関する記事を書く過程で、パフォーマンスに関して良い感じの記述があったので、メモ。
Tips
- FPSはCPUとGPUの使用内容によって決まる
CPU:物理演算・ゲームのコード・スキニング(GPU skiningでない場合。モバイルはNEONで最適化)、パーティクル、Raycasting(レンズフレア等に使用)等が問題となる
GPU:フィルレート、シェーダー、ドローコール、イメージエフェクト等が問題となる - 使用してないコールバック(StartやAwake)は削除しておく。
- 物理演算するオブジェクトの数や計算回数はできるだけ減らす。
- fixedTimeStepの値を減らして、呼出回数を減らす。標準設定では50FPS想定なので50FPSが不要な場合。(60FPS想定なら上げないとガクガクになる)
- 静的なコライダー(rigidbodyの無い奴全般)は動かさない
(大きさ・位置・方向・有効化/無効化を変化させない) - 絶対見えないレンズフレアはOFFにする。内部的にRaycastでチェックしてるぽ
(Culling Groupとか使えるかな) - AnimationClipから不要な曲線や冗長なキーフレームを削除
- デバイス特性にしたがってQualitySettingsを設定。アンチエイリアス削除やシャドウの範囲を限定、LODの数を少なく。
- 非圧縮AudioClipはCPUに優しいので、サイズの小さい音楽なら非圧縮が使える。
(サイズの大きい音楽にはStreaming。最近はAssetBundleからも読める) - 検索の代わりにHashSetを使用
- 検索するよりキャッシュを活用
- 可能であれば複数のカメラは使用しない
- 何度もメッシュを変形する予定があるならMarkDynamicを使用
- 動的なメモリ割り当てやGC Allocは避ける。
- オブジェクトプーリングを使う
- AwakeFromLoad(テクスチャロード時等に行うドライバへの転送処理)は高価。