Unityが無料で発行しているeBook "Optimize Your Mobile Game Performance"を読み解いていこう!という企画です。今回はPhysics、物理に関する章となります。
(前回はAnimation編)
Physics
Unityに組み込まれている物理エンジン(Nvidia PhysX)は、モバイル上では重い場合があります。以下の豆知識は、より高いFPSを得るための助けになるかもしれません。
設定を最適化する
Project SettingsのPlayer設定において、可能な時は常に、Prebake Collsion Meshesを有効にする。
Physics Settings (Project Settings > Physics)も編集することも忘れないでください。Layer Collision Matrixを出来る限り、単純にしてください。
Auto Sync Transformsを無効化し、Reuse Collision Calbackを有効化してください。
コライダーを単純化せよ!
メッシュ・コライダーはコストが高い場合があります。複雑なメッシュ・コライダーの代わりに、より単純なプリミティブ・メッシュか、オリジナルの形状に近似させたメッシュ・コライダーで代用するようにしましょう。
RigidBodyをPhysicsメソッドを使って移動させる
MovePositionやAddForceのようなクラス・メソッドを使って、RigidBodyオブジェクトを移動させましょう。
Transformコンポーネントを直接操作して動かすと、Physics ワールドでの再計算を引き起こしてしまう恐れがあり、これは複雑なシーンにおいてはコストが高いと思われます。
Update関数ではなく、FixedUpdate関数の中で物理オブジェクトを動かしましょう。
Fixed Timestepを修正する
プロジェクト設定でのデフォルトのFixed Timestepは0.02 (50Hz)です。これをあなたの目標となるフレームレートに合うように、値を変えましょう。(例えば、30FPSに対して、0.03とする)
さもなくば、実行時にフレームレートが低下した場合、これはつまり、各フレーム毎にUnityが複数回FixedUpdateを呼び出しており、負荷の高い物理コンテンツによって、CPUパフォーマンスに問題を引き起こしている、ということになります。
Maximum Allowed Timestepは物理演算にどのくらいの時間を消費するか、そして、FixedUpdateイベントがそのイベント内でどのくらいフレームレートの抜け落ちを使えるか?を制限します。
この値を下げるということは、パフォーマンスが怪しい時に物理演算やアニメーションの質を低下させて、かわりにフレームレートへの影響を低下させる、ということになります。
Physics Debuggerで視覚化する
Window > Analysis > Physics Debuggerで物理デバッガーを開き、問題のあるコライダーや不一致(何の?)への対処の足掛かりにしてください。
これによって、どのゲームオブジェクトが、その他のオブジェクトに対して、衝突することが出来るべきかを色付き表示で見ることが出来ます。
更なる情報について、物理演算デバッグの可視化を確認してください。
というわけで、物理編でした。物理演算は当然重たい部分ですし、挙動が読みにくいということもあって、使わないなら使わない方が良いとされています。使うにしても、今回紹介された設定などを上手く使っていきたいですね!
残す章はあと二つとなりました!長いようで、あっという間でしたが、無事最後まで走り切れそうで嬉しいです!
次回はWorkflow and collaboration編!