Unityでインディゲームを作る!

Unityでのゲーム制作を目指し、それに関わる話題についてのブログ

Physics編 Unity eBook "Optimaize Your Mobile Game Performance" を読み解く

Optimize Your Mobile Game Performance

 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メソッドを使って移動させる

 MovePositionAddForceのようなクラス・メソッドを使って、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編!