1. 程式人生 > >Godot Engine 學習筆記 RigidBody2D

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
( ) const
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 必須為truecontacts_reported

必須大於0

  • body_exited ( Object body )

當一個物體離開這個物體時發出的。 contact_monitor 必須為truecontacts_reported 必須大於0

  • body_shape_entered ( int body_id, Object body, int body_shape, int local_shape )

當一個物體進入這個物體時發出的。報告碰撞形狀資訊。有關形狀索引資訊,請參見 CollisionObject2Dcontact_monitor 必須為truecontacts_reported 必須大於 0

  • body_shape_exited ( int body_id, Object body, int body_shape, int local_shape )

當一個物體離開這個物體時發出的。報告碰撞形狀資訊。有關形狀索引資訊,請參見 CollisionObject2Dcontact_monitor 必須為truecontacts_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_impulseadd_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_impulseadd_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 的 positionlinear_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 )

如果用給定向量進行移動會導致衝突,則返回 truemargin 增加了碰撞檢測中涉及的形狀的大小, 並且 result(結果) 是Physics2DTestMotionResult型別的物件,該物件包含關於碰撞的附加資訊(如果有的話)。

使用

還在學。。。。