以下为我对于官方文档的翻译以及使用情况,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 ) |
当一个物体进入这个物体时发出的。 contact_monitor 必须为true
,contacts_reported 必须大于0
。
当一个物体离开这个物体时发出的。 contact_monitor 必须为true
,contacts_reported 必须大于0
。
当一个物体进入这个物体时发出的。报告碰撞形状信息。有关形状索引信息,请参见 CollisionObject2D 。 contact_monitor 必须为true
, contacts_reported 必须大于 0
。
当一个物体离开这个物体时发出的。报告碰撞形状信息。有关形状索引信息,请参见 CollisionObject2D 。 contact_monitor 必须为true
, contacts_reported 必须大于 0
。
当睡眠改变时发出。
-1
那么物体将使用 “Project(项目) > Project Settings(项目设置) > Physics > 2d” 中的 “Default Angular Damp” 。默认值: -1
。0
。true
,如果没有运动,物体就不会计算力并且它将作为一个静止的物体。当其他力通过碰撞或使用 apply_impulse 或 add_force 时,身体会醒来。默认值: true
。false
。0
。CCD_MODE_DISABLED
。连续碰撞检测试图预测一个运动物体在哪里碰撞,而不是移动它,并在碰撞后校正它的运动。连续碰撞检测速度较慢,但精度更高,并且忽略了小的、快速移动的物体的碰撞。光线投射与形状转换方法是能找到的。详情见CCD_MODE_
常数。
true
那么这个物体的内力结合将被禁止。除了碰撞响应之外,物体将只由 _integrate_forces 函数决定移动。0
(无摩擦)到 1
(最大摩擦)。默认值: 1
。1
。-1
。1
。MODE_*
常数。默认值: MODE_RIGID
。true
物体会进入睡眠且不会计算力,直到通过碰撞或使用 apply_impulse 或 add_force 唤醒。enum CCDMode
MODE_RIGID
,但身体不能旋转。这个节点实现了模拟2D物理。您不直接控制 RigidBody2D 。取而代之的是,你施加力(重力、脉冲等)并且物理模拟基于它的质量、摩擦和其他物理特性来计算最终的运动。
RigidBody2D 具有4种行为模式:刚性、静态、字符和运动。
注意:你不应该改变 RigidBody2D 的 position
或 linear_velocity
每帧甚至非常频繁。如果你需要直接影响身体的状态,请使用 _integrate_forces 力,它可以让你直接进入物理状态。
如果需要重写默认物理行为,可以编写自定义力集成。参见 custom_integrator 。
允许您读取并安全地修改对象的仿真状态。如果你需要直接改变身体的 position
或其他物理特性,就用这个 Node._physics_process 代替。默认情况下,它还可以用于附加普通的物理行为,但是 custom_integrator 允许禁用默认行为,并为主体编写自定义的力集成。
向物体增加一个定向力。来自物体原点的力和偏移都在全局坐标中。
对物体施加一个定向推力(这将受身体质量和形状的影响)。这相当于用球杆击打台球:瞬间施加的力。推力和来自物体原点的偏移都在全局坐标中。
返回与此碰撞的物体的列表。使用 contacts_reported 设置最大报告数。还必须将 contact_monitor 设置为 true
。注意,在移动对象之后,此测试的结果不是即时的。对于性能,每帧一次和物理步骤之前更新一次碰撞列表。考虑使用信号代替。
在给定的轴上设置物体的速度。在给定的矢量轴中的速度将被设置为给定的矢量长度。这对于跳跃行为是有用的。
如果用给定向量进行移动会导致冲突,则返回 true
。 margin
增加了碰撞检测中涉及的形状的大小, 并且 result
(结果) 是Physics2DTestMotionResult类型的对象,该对象包含关于碰撞的附加信息(如果有的话)。
RigidBody2D的使用需要创建碰撞区域,可以通过 CollisionShape2D 和 CollisionPolygon2D 创建碰撞区域。
关于RigidBody2D的mode属性的4个模式:
关于 Angular Damp 与 Linear Damp:
关于 Custom Integrator 启用:
关于 函数 add_force 、apply_impulse 、set_axis_velocity:
extends RigidBody2D
var move_left = Vector2(-50, 0)
var left_offset = Vector2(0,0)
var move_right = Vector2(50, 0)
var right_offset = Vector2(0,0)
func _ready():
pass
func _process(delta):
if Input.is_action_pressed("ui_left"):
get_node(".").apply_impulse(left_offset, move_left)
if Input.is_action_pressed("ui_right"):
get_node(".").add_force(right_offset, move_right)
if Input.is_action_pressed("ui_up"):
get_node(".").set_axis_velocity(jump)
pass