跳到主要内容

RigidBody

继承

PhysicsBody

简要描述

通过3D空间中的物理模拟确定物理物体的位置。

描述

这是实现完整3D物理的节点。这意味着您不能直接控制RigidBody。 取而代之的是,您可以对其施加力(重力,脉冲等),然后物理模拟将计算出所产生的运动,碰撞,弹跳,旋转等。

RigidBody具有4个行为mode:刚性,静态,角色和运动。

注意:不要每隔一帧或经常更改一次RigidBody的位置。零星的更改可以很好地工作,但是物理运行的频率(固定的Hz)与通常的渲染(过程回调)不同,甚至可能在单独的线程中运行,因此从过程循环中进行更改可能会导致奇怪的行为。如果您需要直接影响身体的状态,请使用_integrate_forces,它可以直接访问物理状态。

如果需要覆盖默认的物理行为,则可以编写自定义力积分函数。

成员

类型属性名默认值
floatangular_damp-1.0
Vector3angular_velocityVector3( 0, 0, 0 )
boolaxis_lock_angular_xfalse
boolaxis_lock_angular_yfalse
boolaxis_lock_angular_zfalse
boolaxis_lock_linear_xfalse
boolaxis_lock_linear_yfalse
boolaxis_lock_linear_zfalse
floatbounce
boolcan_sleeptrue
boolcontact_monitorfalse
intcontacts_reported0
boolcontinuous_cdfalse
boolcustom_integratorfalse
floatfriction
floatgravity_scale1.0
floatlinear_damp-1.0
Vector3linear_velocityVector3( 0, 0, 0 )
floatmass1.0
intmode0
PhysicsMaterialphysics_material_override
boolsleepingfalse
floatweight9.8

方法

返回值类型方法名称
void_integrate_forces(state: PhysicsDirectBodyState) virtual
voidadd_central_force(force: Vector3)
voidadd_force(force: Vector3, position: Vector3)
voidadd_torque(torque: Vector3)
voidapply_central_impulse(impulse: Vector3)
voidapply_impulse(position: Vector3, impulse: Vector3)
voidapply_torque_impulse(impulse: Vector3)
boolget_axis_lock(axis: int) const
Arrayget_colliding_bodies() const
voidset_axis_lock(axis: int, lock: bool)
voidset_axis_velocity(axis_velocity: Vector3)

信号

  • **body_entered**

当身体与该物体接触时发出。必须启用联系人监控器和报告的联系人,此功能才能起作用。


  • **body_exited**

当身体形状退出与该形状的接触时发出。必须启用联系人监控器和报告的联系人,此功能才能起作用。


  • **body_shape_entered**

当物体与该物体接触时发出。必须启用联系人监控器和报告的联系人,此功能才能起作用。

该信号不仅接收与该物体碰撞的物体,而且还接收其RIDbody_id),碰撞物体的形状索引(body_shape)和


  • **body_shape_exited**

当身体形状退出与该形状的接触时发出。必须启用联系人监控器和报告的联系人,此功能才能起作用。

该信号不仅接收停止与之碰撞的物体,还接收其RIDbody_id),来自碰撞物体的形状索引(body_shape),以及 该物体停止与另一个物体碰撞的形状索引(local_shape)。


  • **sleeping_state_changed**

当身体改变其睡眠状态时发出。


枚举

enum Mode:

  • **MODE_RIGID = 0**

刚体模式。这是刚体的“自然”状态。 它受力影响,并且可以移动,旋转并受用户代码影响。

  • **MODE_STATIC = 1**

静态模式。主体的行为类似于StaticBody,并且只能通过用户代码移动。

  • **MODE_CHARACTER = 2**

角色身体模式。这表现得像刚体,但不能旋转。

  • **MODE_KINEMATIC = 3**

运动身体模式。身体的行为类似于KinematicBody,并且只能通过用户代码移动。


常量

成员说明

  • float angular_damp
Default-1.0
setterset_angular_damp(value)
getterget_angular_damp
  • Vector3 angular_velocity
DefaultVector3( 0, 0, 0 )
setterset_angular_velocity(value)
getterget_angular_velocity
  • bool axis_lock_angular_x
Defaultfalse
setterset_axis_lock(value)
getterget_axis_lock
  • bool axis_lock_angular_y
Defaultfalse
setterset_axis_lock(value)
getterget_axis_lock
  • bool axis_lock_angular_z
Defaultfalse
setterset_axis_lock(value)
getterget_axis_lock
  • bool axis_lock_linear_x
Defaultfalse
setterset_axis_lock(value)
getterget_axis_lock
  • bool axis_lock_linear_y
Defaultfalse
setterset_axis_lock(value)
getterget_axis_lock
  • bool axis_lock_linear_z
Defaultfalse
setterset_axis_lock(value)
getterget_axis_lock
  • float bounce
setterset_bounce(value)
getterget_bounce
  • bool can_sleep
Defaulttrue
setterset_can_sleep(value)
getteris_able_to_sleep
  • bool contact_monitor
Defaultfalse
setterset_contact_monitor(value)
getteris_contact_monitor_enabled
  • int contacts_reported
Default0
setterset_max_contacts_reported(value)
getterget_max_contacts_reported
  • bool continuous_cd
Defaultfalse
setterset_use_continuous_collision_detection(value)
getteris_using_continuous_collision_detection
  • bool custom_integrator
Defaultfalse
setterset_use_custom_integrator(value)
getteris_using_custom_integrator
  • float friction
setterset_friction(value)
getterget_friction
  • float gravity_scale
Default1.0
setterset_gravity_scale(value)
getterget_gravity_scale
  • float linear_damp
Default-1.0
setterset_linear_damp(value)
getterget_linear_damp
  • Vector3 linear_velocity
DefaultVector3( 0, 0, 0 )
setterset_linear_velocity(value)
getterget_linear_velocity
  • float mass
Default1.0
setterset_mass(value)
getterget_mass
  • int mode
Default0
setterset_mode(value)
getterget_mode
  • PhysicsMaterial physics_material_override
setterset_physics_material_override(value)
getterget_physics_material_override
  • bool sleeping
Defaultfalse
setterset_sleeping(value)
getteris_sleeping
  • float weight
Default9.8
setterset_weight(value)
getterget_weight

方法说明

  • _integrate_forces _integrate_forces(state: PhysicsDirectBodyState) virtual

在物理处理期间调用,允许您读取并安全地修改对象的仿真状态。默认情况下,它除了通常的物理行为外,还可以工作,但是custom_integrator属性允许您禁用默认行为,并对物体进行完全自定义的力积分。


  • add_central_force add_central_force(force: Vector3)

在不影响旋转的情况下增加恒定的方向力。

这等效于 add_force(force,Vector3(0,0,0))


  • add_force add_force(force: Vector3, position: Vector3)

增加一个恒定的力(即加速度)。


  • add_torque add_torque(torque: Vector3)

在不影响位置的情况下增加恒定的旋转力。


  • apply_central_impulse apply_central_impulse(impulse: Vector3)

应用方向性脉冲而不影响旋转。

这等效于 apply_impulse(Vector3(0,0,0),impulse)


  • apply_impulse apply_impulse(position: Vector3, impulse: Vector3)

向身体施加定位脉冲。脉冲是与时间无关的!每帧施加一个脉冲将导致依赖于帧速率的力。 因此,仅在模拟一次性冲击时才应使用它。 该位置使用全局坐标系的旋转,但以对象的原点为中心。


  • apply_torque_impulse apply_torque_impulse(impulse: Vector3)

施加会受到车身质量和形状影响的扭矩脉冲。这将使主体围绕传递的impulse矢量旋转。


  • get_axis_lock get_axis_lock(axis: int) const

如果指定的线性轴或旋转轴已锁定,则返回true


  • get_colliding_bodies get_colliding_bodies() const

返回与该碰撞的物体的列表。默认情况下,报告的最大联系人数量为0,请参阅contacts_reported属性以增加该数量。

注意:移动物体后,该测试的结果不是立即产生的。为了提高性能,碰撞列表每帧更新一次,并在物理步骤之前进行更新。 考虑改用信号。


  • set_axis_lock set_axis_lock(axis: int, lock: bool)

锁定指定的线性或旋转轴。


  • set_axis_velocity set_axis_velocity(axis_velocity: Vector3)

设置轴速度。给定矢量轴上的速度将设置为给定矢量长度。 这对于跳跃行为很有用。