Godot Engine 學習筆記 RigidBody2D
RigidBody2D
RigidBody2D
以下為我對於官方文件的翻譯以及使用情況,3.0版本的文件
RigidBody2D官方文件
繼承: PhysicsBody2D < CollisionObject2D < Node2D < CanvasItem < Node < Object
型別: Core
簡要說明
由2D物理引擎控制的物體。
成員函式
返回型別 | 函式 |
---|---|
void | _integrate_forces ( Physics2DDirectBodyState state ) virtual |
void | add_force ( Vector2 offset, Vector2 force ) |
void | apply_impulse ( Vector2 offset, Vector2 impulse ) |
Array | get_colliding_bodies |
void | set_axis_velocity ( Vector2 axis_velocity ) |
bool | test_motion ( Vector2 motion, float margin=0.08, Physics2DTestMotionResult result=null ) |
訊號
- body_entered ( Object body )
當一個物體進入這個物體時發出的。 contact_monitor 必須為true
,contacts_reported
0
。
- body_exited ( Object body )
當一個物體離開這個物體時發出的。 contact_monitor 必須為true
,contacts_reported 必須大於0
。
- body_shape_entered ( int body_id, Object body, int body_shape, int local_shape )
當一個物體進入這個物體時發出的。報告碰撞形狀資訊。有關形狀索引資訊,請參見 CollisionObject2D 。 contact_monitor 必須為true
, contacts_reported 必須大於 0
。
- body_shape_exited ( int body_id, Object body, int body_shape, int local_shape )
當一個物體離開這個物體時發出的。報告碰撞形狀資訊。有關形狀索引資訊,請參見 CollisionObject2D 。 contact_monitor 必須為true
, contacts_reported 必須大於 0
。
- sleeping_state_changed ( )
當睡眠改變時發出。
成員變數
- float angular_damp - 抑制物體的 angular_velocity 。如果值為
-1
那麼物體將使用 “Project(專案) > Project Settings(專案設定) > Physics > 2d” 中的 “Default Angular Damp” 。預設值:-1
。 - float angular_velocity - 物體的旋轉速度。
- Vector2 applied_force - 物體的總施加力。
- float applied_torque - 物體的總施加扭矩。
- float bounce - 物體的彈性。預設值:
0
。 - bool can_sleep - 如果值為
true
,如果沒有運動,物體就不會計算力並且它將作為一個靜止的物體。當其他力通過碰撞或使用 apply_impulse 或 add_force 時,身體會醒來。預設值:true
。 - bool contact_monitor - 如果是真的,當它與另一個 RigidBody2D 相撞時,物體會發出訊號。請參閱 contacts_reported 。預設值:
false
。 - int contacts_reported - 要報告的接觸的最大數量。預設值:
0
。 - CCDMode continuous_cd - 連續碰撞檢測模式。預設值:
CCD_MODE_DISABLED
。
連續碰撞檢測試圖預測一個運動物體在哪裡碰撞,而不是移動它,並在碰撞後校正它的運動。連續碰撞檢測速度較慢,但精度更高,並且忽略了小的、快速移動的物體的碰撞。光線投射與形狀轉換方法是能找到的。詳情見CCD_MODE_
常數。
- bool custom_integrator - 如果值為
true
那麼這個物體的內力結合將被禁止。除了碰撞響應之外,物體將只由 _integrate_forces 函式決定移動。 - float friction - 身體的摩擦力值範圍從
0
(無摩擦)到1
(最大摩擦)。預設值:1
。 - float gravity_scale - 乘以重力施加於身體。物體的重力是由“ Project(專案) > Project Settings(專案設定) > Physics > 2d” 中的 “Default Gravity” 值 和/或 Area2Ds應用的任何附加重力向量計算的。預設值:
1
。 - float inertia - 物體的轉動慣量。這就像質量,但為了旋轉:它決定旋轉身體需要多少扭矩。慣性矩通常是根據質量和形狀自動計算的,但是這個函式允許您設定一個自定義值。設定0(或負)慣性返回自動計算它。
- float linear_damp - 抑制物體的 linear_velocity 。如果- 1,物體將使用 “Project(專案) > Project Settings(專案設定) > Physics > 2d” 中的“Default Linear Damp”。預設值:
-1
。 - Vector2 linear_velocity - 物體的線性速度。
- float mass - 物體的質量。預設值:
1
。 - Mode mode - 物體的模式。參見
MODE_*
常數。預設值:MODE_RIGID
。 - bool sleeping - 如果值為
true
物體會進入睡眠且不會計算力,直到通過碰撞或使用 apply_impulse 或 add_force 喚醒。 - float weight - 物體的重量基於其的質量和 “Project(專案) > Project Settings(專案設定) > Physics > 2d” 中的 “Default Gravity” 的值。
列舉
enum CCDMode
- CCD_MODE_DISABLED = 0 — 禁用連續碰撞檢測。這是檢測身體碰撞最快的方法,但可以錯過小而快速移動的物體。
- CCD_MODE_CAST_RAY = 1 — 使用光線投射實現連續碰撞檢測。這比形狀調整快,但精度不高。
- CCD_MODE_CAST_SHAPE = 2 — 使用形狀調整實現連續碰撞檢測。這是最慢的CCD方法,也是最精確的。
enum Mode - MODE_RIGID = 0 — 剛性模式。身體表現為一個物理物件。它與其他物體發生碰撞,並對它施加的力作出反應。這是預設模式。
- MODE_STATIC = 1 — 靜態模式。物體的表現類似 StaticBody2D ,不動。
- MODE_CHARACTER = 2 — 字元模式。類似於
MODE_RIGID
,但身體不能旋轉。 - MODE_KINEMATIC = 3 — 運動模式。物體類似一個 KinematicBody2D ,必須用程式碼移動。
描述
這個節點實現了模擬2D物理。您不直接控制 RigidBody2D 。取而代之的是,你施加力(重力、脈衝等)並且物理模擬基於它的質量、摩擦和其他物理特性來計算最終的運動。
RigidBody2D 具有4種行為模式:剛性、靜態、字元和運動。
注意:你不應該改變 RigidBody2D 的 position
或 linear_velocity
每幀甚至非常頻繁。如果你需要直接影響身體的狀態,請使用 _integrate_forces 力,它可以讓你直接進入物理狀態。
如果需要重寫預設物理行為,可以編寫自定義力整合。參見 custom_integrator 。
成員函式描述
- void _integrate_forces ( Physics2DDirectBodyState state ) virtual
允許您讀取並安全地修改物件的模擬狀態。如果你需要直接改變身體的 position
或其他物理特性,就用這個 Node._physics_process 代替。預設情況下,它還可以用於附加普通的物理行為,但是 custom_integrator 允許禁用預設行為,併為主體編寫自定義的力整合。
- void add_force ( Vector2 offset, Vector2 force )
向物體增加一個定向力。來自物體原點的力和偏移都在全域性座標中。
- void apply_impulse ( Vector2 offset, Vector2 impulse )
對物體施加一個定向推力(這將受身體質量和形狀的影響)。這相當於用球杆擊打檯球:瞬間施加的力。推力和來自物體原點的偏移都在全域性座標中。
- Array get_colliding_bodies ( ) const
返回與此碰撞的物體的列表。使用 contacts_reported 設定最大報告數。還必須將 contact_monitor 設定為 true
。注意,在移動物件之後,此測試的結果不是即時的。對於效能,每幀一次和物理步驟之前更新一次碰撞列表。考慮使用訊號代替。
- void set_axis_velocity ( Vector2 axis_velocity )
在給定的軸上設定物體的速度。在給定的向量軸中的速度將被設定為給定的向量長度。這對於跳躍行為是有用的。
- bool test_motion ( Vector2 motion, float margin=0.08, Physics2DTestMotionResult result=null )
如果用給定向量進行移動會導致衝突,則返回 true
。 margin
增加了碰撞檢測中涉及的形狀的大小, 並且 result
(結果) 是Physics2DTestMotionResult型別的物件,該物件包含關於碰撞的附加資訊(如果有的話)。
使用
還在學。。。。