マテリアル
概要
すべての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は別々に解決されるため、設定も別になっています。