PhysicsDirectBodyState3D¶
继承: Object
派生: PhysicsDirectBodyState3DExtension
提供对PhysicsServer3D中物理主体的直接访问。
描述¶
提供对PhysicsServer3D中物理主体的直接访问,允许对物理属性进行安全更改。此对象通过RigidBulk的直接状态回调传递,旨在更改该主体的直接状态。请参阅RigidBulk._integrate_forces()。
属性¶
方法¶
属性说明¶
物体的旋转速度,单位为弧度每秒。
Vector3 get_center_of_mass()
身体的质心在全球坐标系中相对于身体中心的位置。
Vector3 center_of_mass_local 🔗
Vector3 get_center_of_mass_local()
人体质心在人体局部坐标系中的位置。
Vector3 get_inverse_inertia()
物体惯性的倒数。
Basis inverse_inertia_tensor 🔗
Basis get_inverse_inertia_tensor()
物体惯性张量的倒数。
float get_inverse_mass()
物体质量的倒数。
物体的线速度,单位为每秒。
Basis principal_inertia_axes 🔗
Basis get_principal_inertia_axes()
如果true,则此身体当前正在休眠(未激活)。
float get_step()
用于模拟的时间步长(delta)。
float get_total_angular_damp()
如果没有任何其他力移动它,物体停止旋转的速度。
Vector3 get_total_gravity()
当前应用于该物体的总重力矢量。
float get_total_linear_damp()
如果没有任何其他力使物体运动,则物体停止运动的速率。
Transform3D transform 🔗
void set_transform(value: Transform3D)
Transform3D get_transform()
身体的变换矩阵。
方法说明¶
void add_constant_central_force(force: Vector3 = Vector3(0, 0, 0)) 🔗
在不影响旋转的情况下添加恒定的方向力,该方向力随着时间的推移不断施加,直到使用constant_force=Vector3(0,0,0)清除。
这相当于在身体质心处使用add_constant_force()。
void add_constant_force(force: Vector3, position: Vector3 = Vector3(0, 0, 0)) 🔗
向身体添加一个恒定的定位力,随着时间的推移不断施加,直到用constant_force=Vector3(0,0,0)清除。
position是在全局坐标中与物体原点的偏移量。
void add_constant_torque(torque: Vector3) 🔗
添加恒定的旋转力而不影响位置,该力随着时间的推移不断施加,直到用constant_torque=Vector3(0,0,0)清除。
void apply_central_force(force: Vector3 = Vector3(0, 0, 0)) 🔗
在不影响旋转的情况下施加定向力。力与时间相关,意味着每次物理更新都要施加。
这相当于在身体质心处使用apply_force()。
void apply_central_impulse(impulse: Vector3 = Vector3(0, 0, 0)) 🔗
在不影响旋转的情况下应用方向脉冲。
脉冲是与时间无关的!每帧应用一个脉冲将导致帧速率相关的力。因此,它应该只在模拟一次性撞击时使用(否则使用“_force”功能)。
这相当于在身体质心处使用apply_impulse()。
void apply_force(force: Vector3, position: Vector3 = Vector3(0, 0, 0)) 🔗
对身体施加定位力。力是时间相关的,意味着每次物理更新都要施加。
position是在全局坐标中与物体原点的偏移量。
void apply_impulse(impulse: Vector3, position: Vector3 = Vector3(0, 0, 0)) 🔗
对身体施加定位脉冲。
脉冲是与时间无关的!每帧应用一个脉冲将导致帧速率相关的力。因此,它应该只在模拟一次性撞击时使用(否则使用“_force”功能)。
position是在全局坐标中与物体原点的偏移量。
void apply_torque(torque: Vector3) 🔗
在不影响位置的情况下施加旋转力。力是时间相关的,意味着每次物理更新都要施加力。
注意:需要inverse_inertia才能工作。要拥有inverse_inertia,活动的ColliderShape必须是节点的子节点,或者您可以手动设置inverse_inertia。
void apply_torque_impulse(impulse: Vector3) 🔗
在不影响位置的情况下对身体施加旋转脉冲。
脉冲是与时间无关的!每帧应用一个脉冲将导致帧速率相关的力。因此,它应该只在模拟一次性撞击时使用(否则使用“_force”功能)。
注意:需要inverse_inertia才能工作。要拥有inverse_inertia,活动的ColliderShape必须是节点的子节点,或者您可以手动设置inverse_inertia。
Vector3 get_constant_force() const 🔗
返回在每次物理更新期间施加的身体的总恒定位置力。
参见add_constant_force()和add_constant_central_force()。
Vector3 get_constant_torque() const 🔗
返回在每次物理更新期间施加的物体的总恒定旋转力。
RID get_contact_collider(contact_idx: int) const 🔗
返回碰撞器的RID。
int get_contact_collider_id(contact_idx: int) const 🔗
返回碰撞器的对象ID。
Object get_contact_collider_object(contact_idx: int) const 🔗
返回碰撞器对象。
Vector3 get_contact_collider_position(contact_idx: int) const 🔗
返回碰撞器上接触点在全局坐标系中的位置。
int get_contact_collider_shape(contact_idx: int) const 🔗
返回碰撞器的形状索引。
Vector3 get_contact_collider_velocity_at_position(contact_idx: int) const 🔗
返回碰撞器接触点处的线速度矢量。
int get_contact_count() const 🔗
返回此主体与其他主体的联系人数。
注意:默认情况下,除非主体配置为监控联系人,否则返回0。请参阅RigidBulk.contact_monitor。
Vector3 get_contact_impulse(contact_idx: int) const 🔗
接触产生的冲动。
Vector3 get_contact_local_normal(contact_idx: int) const 🔗
返回接触点的局部法线。
Vector3 get_contact_local_position(contact_idx: int) const 🔗
返回身体上接触点在全局坐标系中的位置。
int get_contact_local_shape(contact_idx: int) const 🔗
返回碰撞的局部形状索引。
Vector3 get_contact_local_velocity_at_position(contact_idx: int) const 🔗
返回物体接触点处的线速度矢量。
PhysicsDirectSpaceState3D get_space_state() 🔗
返回空间的当前状态,对查询很有用。
Vector3 get_velocity_at_local_position(local_position: Vector3) const 🔗
返回物体在给定相对位置的速度,包括平移和旋转。
void integrate_forces() 🔗
通过施加相当于一个物理刻度的重力和阻尼来更新身体的线性和角速度。
void set_constant_force(force: Vector3) 🔗
设置在每次物理更新期间施加的身体总恒定位置力。
参见add_constant_force()和add_constant_central_force()。
void set_constant_torque(torque: Vector3) 🔗
设置在每次物理更新期间应用的身体的总恒定旋转力。