マテリアル
概要
すべてのPhysicsBody
はPhysicsMaterial
(Quantumデータアセット)が必要です。PhysicsMaterial
は、物理エンジンによる衝突の解決・力や速度の積分に必要なプロパティを保持しています。
PhysicsMaterialデータアセット
PhysicsMaterial
は、以下のパラメータを持ちます。
- Restitution (反発係数:"bounciness"や"bounce"とも呼ばれる)
- Restiution Combine Function
- Friction Static(静摩擦係数)
- Friction Dynamic(動摩擦係数)
- Friction Combine Function
PhysicsMaterial
アセットが設定されていない場合は、デフォルトの物理マテリアルが割り当てられます。デフォルトの物理マテリアルは、SimulationConfig
の物理設定にリンクされています。

PhysicsMaterial
アセットは、PhysicsCollider
に直接割り当てることができます。
C#
var material = f.FindAsset<PhysicsMaterial>("steel");
collider.Material = material;
f.Set(entity, collider);
重要な備考
PhysicsMaterial
はデータアセットで、Quantumアセットデータベースに存在します。アセットはロールバック可能なゲームステートの一部ではないため、すべてのPhysicsMaterial
は実行時に不変であることが前提です。ゲーム実行中にプロパティを変更すると、非決定論的な動作を引き起こします。
PhysicsMaterial
は他のデータアセットと同じルールに従います。
C#
// ロールバックできないため、安全ではありません
collider->Material.Restitution = FP._0;
// 参照の切り替えはロールバックできるため、安全です
var newMaterial = f.FindAsset<PhysicsMaterial>("ice");
collider->Material = newMaterial;
Combine関数
Combine関数は、優先順位に基づいて、各衝突ペアの反発係数と摩擦係数を解決するために使用されます。物理システムは2つのコライダーの優先度が高い方の関数を選択します。優先順位は次の通りです。
- Max (最大)
- Min (最小)
- Average (平均)
- Multiply (積)
例えば、コライダーAとコライダーBの衝突ペアを考えます。コライダーAの物理マテリアルのRestitution Combine Function
はMax
、コライダーBの物理マテリアルのRestitution Combine Function
はAverage
に設定されています。Max
はAverage
より優先されるため、この衝突の反発係数はMax
関数を使用して解決されます。
同じロジックがFriction Combine Function
でも適用されます。
注意: Friction Combine Function
とRestitution Combine Function
は別々に解決されるため、設定も別になっています。