跳转至

RigidBody

继承

PhysicsBody

简要描述

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

描述

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

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

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

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

成员

类型 属性名 默认值
float angular_damp -1.0
Vector3 angular_velocity Vector3( 0, 0, 0 )
bool axis_lock_angular_x false
bool axis_lock_angular_y false
bool axis_lock_angular_z false
bool axis_lock_linear_x false
bool axis_lock_linear_y false
bool axis_lock_linear_z false
float bounce
bool can_sleep true
bool contact_monitor false
int contacts_reported 0
bool continuous_cd false
bool custom_integrator false
float friction
float gravity_scale 1.0
float linear_damp -1.0
Vector3 linear_velocity Vector3( 0, 0, 0 )
float mass 1.0
int mode 0
PhysicsMaterial physics_material_override
bool sleeping false
float weight 9.8

方法

返回值类型 方法名称
void _integrate_forces(state: PhysicsDirectBodyState) virtual
void add_central_force(force: Vector3)
void add_force(force: Vector3, position: Vector3)
void add_torque(torque: Vector3)
void apply_central_impulse(impulse: Vector3)
void apply_impulse(position: Vector3, impulse: Vector3)
void apply_torque_impulse(impulse: Vector3)
bool get_axis_lock(axis: int) const
Array get_colliding_bodies() const
void set_axis_lock(axis: int, lock: bool)
void set_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
setter set_angular_damp(value)
getter get_angular_damp
  • Vector3 angular_velocity
Default Vector3( 0, 0, 0 )
setter set_angular_velocity(value)
getter get_angular_velocity
  • bool axis_lock_angular_x
Default false
setter set_axis_lock(value)
getter get_axis_lock
  • bool axis_lock_angular_y
Default false
setter set_axis_lock(value)
getter get_axis_lock
  • bool axis_lock_angular_z
Default false
setter set_axis_lock(value)
getter get_axis_lock
  • bool axis_lock_linear_x
Default false
setter set_axis_lock(value)
getter get_axis_lock
  • bool axis_lock_linear_y
Default false
setter set_axis_lock(value)
getter get_axis_lock
  • bool axis_lock_linear_z
Default false
setter set_axis_lock(value)
getter get_axis_lock
  • float bounce
setter set_bounce(value)
getter get_bounce
  • bool can_sleep
Default true
setter set_can_sleep(value)
getter is_able_to_sleep
  • bool contact_monitor
Default false
setter set_contact_monitor(value)
getter is_contact_monitor_enabled
  • int contacts_reported
Default 0
setter set_max_contacts_reported(value)
getter get_max_contacts_reported
  • bool continuous_cd
Default false
setter set_use_continuous_collision_detection(value)
getter is_using_continuous_collision_detection
  • bool custom_integrator
Default false
setter set_use_custom_integrator(value)
getter is_using_custom_integrator
  • float friction
setter set_friction(value)
getter get_friction
  • float gravity_scale
Default 1.0
setter set_gravity_scale(value)
getter get_gravity_scale
  • float linear_damp
Default -1.0
setter set_linear_damp(value)
getter get_linear_damp
  • Vector3 linear_velocity
Default Vector3( 0, 0, 0 )
setter set_linear_velocity(value)
getter get_linear_velocity
  • float mass
Default 1.0
setter set_mass(value)
getter get_mass
  • int mode
Default 0
setter set_mode(value)
getter get_mode
  • PhysicsMaterial physics_material_override
setter set_physics_material_override(value)
getter get_physics_material_override
  • bool sleeping
Default false
setter set_sleeping(value)
getter is_sleeping
  • float weight
Default 9.8
setter set_weight(value)
getter get_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)

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