Godot 遊戲引擎指南/物理
物理在許多遊戲中被用於許多不同的用途,例如墜落、撞牆、跳躍等等。
StaticBody2D 和 StaticBody3D
[編輯 | 編輯原始碼]StaticBody 是一個碰撞體,它不打算移動。雖然它可以移動,但它不應用於角色。
靜態體可以毫無問題地縮放。
它是速度最快的碰撞體型別。它應該用於環境和其他不可移動的事物。
RigidBody2D 和 RigidBody3D
[編輯 | 編輯原始碼]RigidBody 是一個受重力影響的物件。它通常不用於角色,因為它很難控制,但可以在物理模擬遊戲中使用,因為它非常準確。
它不能以任何方式縮放!
KinematicBody 是一個旨在透過指令碼移動的物體。它也可以用作檢測是否撞擊物體或表面的方法。
運動學物體非常適合角色,但不應該用於模擬高階物理。
Area 可用於檢測其他區域、剛體或運動學物體。重疊時會發出一個訊號,當物體離開時也會發出另一個訊號。
如果攝像機/音訊監聽器在區域內,則可以更改聲音的效果。例如:跳入水中時,可以使汽車噪音變得沉悶。您可以透過更改“AudioBus”屬性並選擇匯流排來實現。您應該為此建立一個“沉悶”匯流排,並且audio_bus_override 必須設定為true。(這是覆蓋的預設音訊匯流排,這意味著汽車噪音不能使用音訊匯流排。它不會將匯流排疊加在其他匯流排之上)。
為了使碰撞物體與另一個物體發生碰撞,它需要一個或多個CollisionShape 或ColisionPolygon 子節點。CollisionShapes 需要定義一個物件來設定它們的形狀和大小,而 CollisionPolygons 需要定義多個邊(至少 3 個)。
每個物體都可以有遮罩和層級。如果至少一個遮罩等於重疊物體的層級,則這兩個物體將被視為發生碰撞。這可以用來使玩家與地面、牆壁和敵人發生碰撞,但不能與其他玩家發生碰撞,或者僅與地面和牆壁發生碰撞。
每個層級可以在專案設定 -> 層級名稱 -> 2d 物理和專案設定 -> 層級名稱 -> 3d 物理中指定名稱。這可以提高可讀性,並減少出現錯誤的可能性。以下是一個示例
- 層級 1:世界(牆壁、地面、橋樑等)
- 層級 2:玩家
- 層級 3:敵人
- 層級 4:彈藥
- 等等
如果您的 3D 遊戲使用 SoftBody,您可以模擬當另一個物體與其碰撞時會發生變形的物體。這對斗篷和窗簾很有用。如果未使用,最好關閉專案設定 -> 物理 -> 3d -> 活動柔軟世界以提高效能。
- 3D
- GodotPhysics:簡單且功能強大。與某些碰撞形狀不相容。
- Bullet:預設引擎。不斷檢查碰撞,減少碰撞缺失,但效能成本更高。如果您的遊戲包含快速移動的物體,例如賽車或子彈,請使用此引擎。
- 2D
- GodotPhysics:預設引擎。簡單且功能強大。
