Materials
概述
每個 PhysicsBody(物理主體)都需要一個 PhysicsMaterial(物理材料,一種Quantum數據資產)。物理材料包含物理引擎用於解算碰撞、力和速度積分所需的屬性。
PhysicsMaterial數據資產
PhysicsMaterial包含以下參數:
- 恢復係數(有時稱為「彈性」或「反彈力」)
- 恢復係數組合函數
- 靜摩擦係數
- 動摩擦係數
- 摩擦組合函數
如果未指定 PhysicsMaterial 資產,將會分配默認的物理材料;默認物理材料是在 SimulationConfig(模擬配置)的物理設置中鏈接的那個。

PhysicsMaterial 資產可以直接分配給 PhysicsCollider(物理碰撞體):
C#
var material = f.FindAsset<PhysicsMaterial>("steel");
collider.Material = material;
f.Set(entity, collider);
重要注意事項
PhysicsMaterial 是一種數據資產,存在於Quantum資產數據庫中。由於資產並不屬於可回滾的遊戲狀態,因此每個 PhysicsMaterial 在運行時都被視為不可變的。在遊戲運行時更改其屬性會導致非確定性行為。
PhysicsMaterial遵循與其他數據資產相同的規則。
C#
// this is NOT safe and cannot be rolled-back:
collider->Material.Restitution = FP._0;
// switching a reference is safe and can be rolled back:
var newMaterial = f.FindAsset<PhysicsMaterial>("ice");
collider->Material = newMaterial;
組合函數
用於解算每個碰撞流形(一對碰撞體)的恢復係數和摩擦的組合函數,是基於組合函數的優先級順序確定的。物理系統會從兩個碰撞體中選擇優先級最高的函數。
優先級順序如下:
- 最大值(Max)
- 最小值(Min)
- 平均值(Average)
- 乘積(Multiply)
例如:考慮一個包含碰撞體 A 和碰撞體 B 的碰撞流形。碰撞體 A 的物理材料的「恢復係數組合函數 」設為 最大值(Max),而碰撞體 B 的物理材料的該函數設為 平均值(Average)。由於「最大值」的優先級高於「平均值」,因此該碰撞的恢復係數將使用「最大值」函數來解算。
同樣的邏輯也適用於「摩擦組合函數」。
注意: 摩擦組合函數 和 恢復係數組合函數 是單獨解算的,因此它們具有不同的設置。
Back to top