RigidBody
继承
简要描述
通过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**
当物体与该物体接触时发出。必须启用联系人监控器和报告的联系人,此功能才能起作用。
该信号不仅接收与该物体碰撞的物体,而且还接收其RID(body_id
),碰撞物体的形状索引(body_shape
)和
- **body_shape_exited**
当身体形状退出与该形状的接触时发出。必须启用联系人监控器和报告的联系人,此功能才能起作用。
该信号不仅接收停止与之碰撞的物体,还接收其RID(body_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)
设置轴速度。给定矢量轴上的速度将设置为给定矢量长度。 这对于跳跃行为很有用。