物理エンジンの設定(パフォーマンス調整)
StaticオブジェクトとDynamicオブジェクトについて:
Unityのゲームオブジェクトには動かないオブジェクト(壁など)Staticオブジェクトと動くオブジェクト(プレイヤーなど)Dynamicオブジェクトがある。
ゲームオブジェクトにRigidbodyを設定することで Dynamic オブジェクトにすることができる。
Playerのボールは物理エンジンを通してスクリプトからAddForceで動かすためにRigidbodyにしてある。
PickUpをDynamicオブジェクトにしたがAddForceで力を加えて物理エンジンで動かしていない。
参照:【Unity】Rigidbody や Collider の設定により変化する、当たり判定の性質 前編 https://bardaxel.jp/archives/16
StaticオブジェクトはRigidbodyに設定されていない通常のオブジェクトである。通常は動かないが、スクリプトにより位置や姿勢を変更することは出来る(RotatorでPickUpを回転させたように)。
Static オブジェクトの位置や姿勢がプログラムによって変化すると
物理シミュレーションを再計算するため高負荷となりパフォーマンスに影響が出る。
物理シミュレーションの結果に誤りが生じて衝突判定に失敗するなどの悪影響が出る。
参照: 【Unity】Rigidbody や Collider の設定により変化する、当たり判定の性質 後編
コライダー https://docs.unity3d.com/ja/2018.3/Manual/CollidersOverview.html の「静的コライダー」の項目を参照。
Unityで物理エンジンを使わずにスクリプトからオブジェクトを動かす際には、パフォーマンスが低下しないようにRigidbodyを追加してDynamicオブジェクトにしたうえで、Is KinematicをONにして物理シミュレーションからの力の影響を受けないようにする。kinamaticにしたオブジェクトでも通常のColliderによる衝突判定の対象になり、ぶつかれば跳ね返る。
ここではPickUpを Is Triggerにしているので衝突しても跳ね返らずに通過する。
ゲームオブジェクトのstatic 設定について:
InspectorにStaticスイッチがある。
これはゲーム画面の描画(レンダリング)のパフォーマンス改善用の設定。Staticなオブジェクトを纏めて効率よく描画したり反射や映り込みなどCGの効果やナビゲーションシステムの利用するかどうかなどを細かく調整できる。
https://docs.unity3d.com/ja/2018.4/Manual/StaticObjects.html
ローコールバッチング https://docs.unity3d.com/ja/2018.4/Manual/DrawCallBatching.html
ダイナミックバッチングによる描画順序の処理最適化 https://qiita.com/growsic/items/853b7114adb785a735d7
【実験】
GameObjectに RigidBody の設定して OnCollisionEnterとOnTriggerEnterの挙動の差を調べる。
PickUp の Use Gravity を On/Off 効果を確認する。
PickUp の Is Kinematic On/Off 効果を確認する。
ON/OFFの4通りの組み合わせについて確かめておくとよい。