Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

PhysicsServer3D

继承: Object

派生: PhysicsServer3DExtension

用于访问低阶 3D 物理的服务器接口。

描述

PhysicsServer3D 是负责所有 3D 物理的服务器。它可以直接创建和操作所有物理对象:

  • Space(空间)是用于物理仿真的自包含世界。它包含实体、区域和关节。可以对其状态进行查询,获取碰撞和相交信息,并且可以修改部分仿真参数。

  • Shape(形状)是球形、盒形、圆柱形、多边形等几何形状。加入到实体/区域中就可以用来进行碰撞检测,还可以带有相对于实体/区域原点的额外变换。实体/区域中可以添加多个(变换后的)形状,并且可以使用不同的局部变换将单个形状多次添加到实体/区域中。

  • Body(实体)是物理对象,可以处于静态、运动学或刚性模式。可以对其状态进行查询和更新(例如位置、速度等)。可以设置力的集成回调,自定义实体的物理特性。

  • Area(区域)是空间中的区块,可用于检测进入和离开它的实体和区域。可以设置实体的监视回调,报告进入/离开的实体形状,同样可以设置区域的监视回调。通过设置区域参数,可以在区域内覆盖重力和阻尼。

  • Joint(关节)是两个实体之间或一个实体相对于某个点的约束。可以调整关节偏置和弹簧关节的放松长度等参数。

PhysicsServer3D 中的物理对象可以独立创建和操作;不必将它们绑定到场景树中的节点。

注意:所有 3D 物理节点都在内部使用这个物理服务器。将物理节点添加到场景树,就会导致在物理服务器中创建相应的物理对象。刚体节点会注册回调,该回调会(在每次物理更新时)使用物理服务器中相应实体对象的变换更新该节点的变换。区域节点会注册回调,用来通知区域节点与物理服务器中相应区域对象的重叠。射线投射节点会查询物理服务器中相关空间的直接状态。

方法

void

area_add_shape ( RID area, RID shape, Transform3D transform=Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0), bool disabled=false )

void

area_attach_object_instance_id ( RID area, int id )

void

area_clear_shapes ( RID area )

RID

area_create ( )

int

area_get_collision_layer ( RID area ) const

int

area_get_collision_mask ( RID area ) const

int

area_get_object_instance_id ( RID area ) const

Variant

area_get_param ( RID area, AreaParameter param ) const

RID

area_get_shape ( RID area, int shape_idx ) const

int

area_get_shape_count ( RID area ) const

Transform3D

area_get_shape_transform ( RID area, int shape_idx ) const

RID

area_get_space ( RID area ) const

Transform3D

area_get_transform ( RID area ) const

void

area_remove_shape ( RID area, int shape_idx )

void

area_set_area_monitor_callback ( RID area, Callable callback )

void

area_set_collision_layer ( RID area, int layer )

void

area_set_collision_mask ( RID area, int mask )

void

area_set_monitor_callback ( RID area, Callable callback )

void

area_set_monitorable ( RID area, bool monitorable )

void

area_set_param ( RID area, AreaParameter param, Variant value )

void

area_set_ray_pickable ( RID area, bool enable )

void

area_set_shape ( RID area, int shape_idx, RID shape )

void

area_set_shape_disabled ( RID area, int shape_idx, bool disabled )

void

area_set_shape_transform ( RID area, int shape_idx, Transform3D transform )

void

area_set_space ( RID area, RID space )

void

area_set_transform ( RID area, Transform3D transform )

void

body_add_collision_exception ( RID body, RID excepted_body )

void

body_add_constant_central_force ( RID body, Vector3 force )

void

body_add_constant_force ( RID body, Vector3 force, Vector3 position=Vector3(0, 0, 0) )

void

body_add_constant_torque ( RID body, Vector3 torque )

void

body_add_shape ( RID body, RID shape, Transform3D transform=Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0), bool disabled=false )

void

body_apply_central_force ( RID body, Vector3 force )

void

body_apply_central_impulse ( RID body, Vector3 impulse )

void

body_apply_force ( RID body, Vector3 force, Vector3 position=Vector3(0, 0, 0) )

void

body_apply_impulse ( RID body, Vector3 impulse, Vector3 position=Vector3(0, 0, 0) )

void

body_apply_torque ( RID body, Vector3 torque )

void

body_apply_torque_impulse ( RID body, Vector3 impulse )

void

body_attach_object_instance_id ( RID body, int id )

void

body_clear_shapes ( RID body )

RID

body_create ( )

int

body_get_collision_layer ( RID body ) const

int

body_get_collision_mask ( RID body ) const

float

body_get_collision_priority ( RID body ) const

Vector3

body_get_constant_force ( RID body ) const

Vector3

body_get_constant_torque ( RID body ) const

PhysicsDirectBodyState3D

body_get_direct_state ( RID body )

int

body_get_max_contacts_reported ( RID body ) const

BodyMode

body_get_mode ( RID body ) const

int

body_get_object_instance_id ( RID body ) const

Variant

body_get_param ( RID body, BodyParameter param ) const

RID

body_get_shape ( RID body, int shape_idx ) const

int

body_get_shape_count ( RID body ) const

Transform3D

body_get_shape_transform ( RID body, int shape_idx ) const

RID

body_get_space ( RID body ) const

Variant

body_get_state ( RID body, BodyState state ) const

bool

body_is_axis_locked ( RID body, BodyAxis axis ) const

bool

body_is_continuous_collision_detection_enabled ( RID body ) const

bool

body_is_omitting_force_integration ( RID body ) const

void

body_remove_collision_exception ( RID body, RID excepted_body )

void

body_remove_shape ( RID body, int shape_idx )

void

body_reset_mass_properties ( RID body )

void

body_set_axis_lock ( RID body, BodyAxis axis, bool lock )

void

body_set_axis_velocity ( RID body, Vector3 axis_velocity )

void

body_set_collision_layer ( RID body, int layer )

void

body_set_collision_mask ( RID body, int mask )

void

body_set_collision_priority ( RID body, float priority )

void

body_set_constant_force ( RID body, Vector3 force )

void

body_set_constant_torque ( RID body, Vector3 torque )

void

body_set_enable_continuous_collision_detection ( RID body, bool enable )

void

body_set_force_integration_callback ( RID body, Callable callable, Variant userdata=null )

void

body_set_max_contacts_reported ( RID body, int amount )

void

body_set_mode ( RID body, BodyMode mode )

void

body_set_omit_force_integration ( RID body, bool enable )

void

body_set_param ( RID body, BodyParameter param, Variant value )

void

body_set_ray_pickable ( RID body, bool enable )

void

body_set_shape ( RID body, int shape_idx, RID shape )

void

body_set_shape_disabled ( RID body, int shape_idx, bool disabled )

void

body_set_shape_transform ( RID body, int shape_idx, Transform3D transform )

void

body_set_space ( RID body, RID space )

void

body_set_state ( RID body, BodyState state, Variant value )

bool

body_test_motion ( RID body, PhysicsTestMotionParameters3D parameters, PhysicsTestMotionResult3D result=null )

RID

box_shape_create ( )

RID

capsule_shape_create ( )

RID

concave_polygon_shape_create ( )

float

cone_twist_joint_get_param ( RID joint, ConeTwistJointParam param ) const

void

cone_twist_joint_set_param ( RID joint, ConeTwistJointParam param, float value )

RID

convex_polygon_shape_create ( )

RID

custom_shape_create ( )

RID

cylinder_shape_create ( )

void

free_rid ( RID rid )

bool

generic_6dof_joint_get_flag ( RID joint, Vector3.Axis axis, G6DOFJointAxisFlag flag ) const

float

generic_6dof_joint_get_param ( RID joint, Vector3.Axis axis, G6DOFJointAxisParam param ) const

void

generic_6dof_joint_set_flag ( RID joint, Vector3.Axis axis, G6DOFJointAxisFlag flag, bool enable )

void

generic_6dof_joint_set_param ( RID joint, Vector3.Axis axis, G6DOFJointAxisParam param, float value )

int

get_process_info ( ProcessInfo process_info )

RID

heightmap_shape_create ( )

bool

hinge_joint_get_flag ( RID joint, HingeJointFlag flag ) const

float

hinge_joint_get_param ( RID joint, HingeJointParam param ) const

void

hinge_joint_set_flag ( RID joint, HingeJointFlag flag, bool enabled )

void

hinge_joint_set_param ( RID joint, HingeJointParam param, float value )

void

joint_clear ( RID joint )

RID

joint_create ( )

void

joint_disable_collisions_between_bodies ( RID joint, bool disable )

int

joint_get_solver_priority ( RID joint ) const

JointType

joint_get_type ( RID joint ) const

bool

joint_is_disabled_collisions_between_bodies ( RID joint ) const

void

joint_make_cone_twist ( RID joint, RID body_A, Transform3D local_ref_A, RID body_B, Transform3D local_ref_B )

void

joint_make_generic_6dof ( RID joint, RID body_A, Transform3D local_ref_A, RID body_B, Transform3D local_ref_B )

void

joint_make_hinge ( RID joint, RID body_A, Transform3D hinge_A, RID body_B, Transform3D hinge_B )

void

joint_make_pin ( RID joint, RID body_A, Vector3 local_A, RID body_B, Vector3 local_B )

void

joint_make_slider ( RID joint, RID body_A, Transform3D local_ref_A, RID body_B, Transform3D local_ref_B )

void

joint_set_solver_priority ( RID joint, int priority )

Vector3

pin_joint_get_local_a ( RID joint ) const

Vector3

pin_joint_get_local_b ( RID joint ) const

float

pin_joint_get_param ( RID joint, PinJointParam param ) const

void

pin_joint_set_local_a ( RID joint, Vector3 local_A )

void

pin_joint_set_local_b ( RID joint, Vector3 local_B )

void

pin_joint_set_param ( RID joint, PinJointParam param, float value )

RID

separation_ray_shape_create ( )

void

set_active ( bool active )

Variant

shape_get_data ( RID shape ) const

ShapeType

shape_get_type ( RID shape ) const

void

shape_set_data ( RID shape, Variant data )

float

slider_joint_get_param ( RID joint, SliderJointParam param ) const

void

slider_joint_set_param ( RID joint, SliderJointParam param, float value )

AABB

soft_body_get_bounds ( RID body ) const

RID

space_create ( )

PhysicsDirectSpaceState3D

space_get_direct_state ( RID space )

float

space_get_param ( RID space, SpaceParameter param ) const

bool

space_is_active ( RID space ) const

void

space_set_active ( RID space, bool active )

void

space_set_param ( RID space, SpaceParameter param, float value )

RID

sphere_shape_create ( )

RID

world_boundary_shape_create ( )


枚举

enum JointType:

JointType JOINT_TYPE_PIN = 0

Joint3DPinJoint3D

JointType JOINT_TYPE_HINGE = 1

Joint3DHingeJoint3D

JointType JOINT_TYPE_SLIDER = 2

Joint3DSliderJoint3D

JointType JOINT_TYPE_CONE_TWIST = 3

Joint3DConeTwistJoint3D

JointType JOINT_TYPE_6DOF = 4

Joint3DGeneric6DOFJoint3D

JointType JOINT_TYPE_MAX = 5

代表 JointType 枚举的大小。


enum PinJointParam:

PinJointParam PIN_JOINT_BIAS = 0

固定对象试图保持彼此位置关系的力度。

越高越强。

PinJointParam PIN_JOINT_DAMPING = 1

被固定的物体试图保持彼此速度关系的力度。

越高越强。

PinJointParam PIN_JOINT_IMPULSE_CLAMP = 2

如果高于 0,则此值是此 Joint3D 施加在其末端的冲量的最大值。


enum HingeJointParam:

HingeJointParam HINGE_JOINT_BIAS = 0

两个物体向不同方向移动时被拉回到一起的速度。

HingeJointParam HINGE_JOINT_LIMIT_UPPER = 1

铰链上的最大旋转。

HingeJointParam HINGE_JOINT_LIMIT_LOWER = 2

铰链上的最小旋转。

HingeJointParam HINGE_JOINT_LIMIT_BIAS = 3

垂直于铰链的轴线上的旋转得到纠正的速度。

HingeJointParam HINGE_JOINT_LIMIT_SOFTNESS = 4

HingeJointParam HINGE_JOINT_LIMIT_RELAXATION = 5

该值越低,旋转速度越慢。

HingeJointParam HINGE_JOINT_MOTOR_TARGET_VELOCITY = 6

目标马达的目标速度。

HingeJointParam HINGE_JOINT_MOTOR_MAX_IMPULSE = 7

马达的最大加速度。


enum HingeJointFlag:

HingeJointFlag HINGE_JOINT_FLAG_USE_LIMIT = 0

如果为 true,铰链具有最大和最小旋转。

HingeJointFlag HINGE_JOINT_FLAG_ENABLE_MOTOR = 1

如果为 true,则马达将转动铰链。


enum SliderJointParam:

SliderJointParam SLIDER_JOINT_LINEAR_LIMIT_UPPER = 0

阻尼发生前轴心点之间在 X 轴上的最大差异。

SliderJointParam SLIDER_JOINT_LINEAR_LIMIT_LOWER = 1

阻尼发生前轴心点之间在 X 轴上的最小差异。

SliderJointParam SLIDER_JOINT_LINEAR_LIMIT_SOFTNESS = 2

一旦超过极限,应用于滑块轴上移动的系数。越低,运动越慢。

SliderJointParam SLIDER_JOINT_LINEAR_LIMIT_RESTITUTION = 3

超出限制后的补偿。数值越低,损失的速度能量越多。

SliderJointParam SLIDER_JOINT_LINEAR_LIMIT_DAMPING = 4

一旦超过滑块的极限,阻尼的数量。

SliderJointParam SLIDER_JOINT_LINEAR_MOTION_SOFTNESS = 5

只要滑块在限制范围内,就应用于滑块轴上移动的系数。越低,运动越慢。

SliderJointParam SLIDER_JOINT_LINEAR_MOTION_RESTITUTION = 6

滑块限制内的恢复量。

SliderJointParam SLIDER_JOINT_LINEAR_MOTION_DAMPING = 7

滑块内部的阻尼量受到限制。

SliderJointParam SLIDER_JOINT_LINEAR_ORTHOGONAL_SOFTNESS = 8

应用于在垂直于滑块的轴上移动的系数。

SliderJointParam SLIDER_JOINT_LINEAR_ORTHOGONAL_RESTITUTION = 9

当移动穿过垂直于滑块的轴时的恢复量。

SliderJointParam SLIDER_JOINT_LINEAR_ORTHOGONAL_DAMPING = 10

当移动穿过垂直于滑块的轴时的阻尼量。

SliderJointParam SLIDER_JOINT_ANGULAR_LIMIT_UPPER = 11

滑块旋转的上限。

SliderJointParam SLIDER_JOINT_ANGULAR_LIMIT_LOWER = 12

滑块旋转的下限。

SliderJointParam SLIDER_JOINT_ANGULAR_LIMIT_SOFTNESS = 13

一旦超过极限,应用于所有旋转的系数。

SliderJointParam SLIDER_JOINT_ANGULAR_LIMIT_RESTITUTION = 14

超过限制时旋转的恢复量。

SliderJointParam SLIDER_JOINT_ANGULAR_LIMIT_DAMPING = 15

超过极限时旋转的阻尼量。

SliderJointParam SLIDER_JOINT_ANGULAR_MOTION_SOFTNESS = 16

应用于所有极限旋转的因子。

SliderJointParam SLIDER_JOINT_ANGULAR_MOTION_RESTITUTION = 17

极限内旋转的恢复量。

SliderJointParam SLIDER_JOINT_ANGULAR_MOTION_DAMPING = 18

极限内旋转的阻尼量。

SliderJointParam SLIDER_JOINT_ANGULAR_ORTHOGONAL_SOFTNESS = 19

应用于垂直于滑块的轴上的所有旋转的因子。

SliderJointParam SLIDER_JOINT_ANGULAR_ORTHOGONAL_RESTITUTION = 20

垂直于滑块的轴上的旋转恢复量。

SliderJointParam SLIDER_JOINT_ANGULAR_ORTHOGONAL_DAMPING = 21

垂直于滑块的轴上的旋转阻尼量。

SliderJointParam SLIDER_JOINT_MAX = 22

代表 SliderJointParam 枚举的大小。


enum ConeTwistJointParam:

ConeTwistJointParam CONE_TWIST_JOINT_SWING_SPAN = 0

摆动是围绕垂直于扭转轴的轴线,从一边到另一边的旋转。

摆动跨度定义了沿摆动轴旋转多少不会得到校正。

可以被定义为 ConeTwistJoint3D 中的松动。

如果低于 0.05,该行为将被锁定。

ConeTwistJointParam CONE_TWIST_JOINT_TWIST_SPAN = 1

扭转是绕扭转轴的旋转,此值定义了关节可以扭转多远。

如果低于 0.05,则扭转被锁定。

ConeTwistJointParam CONE_TWIST_JOINT_BIAS = 2

摆动或扭转的速度。

越高,速度越快。

ConeTwistJointParam CONE_TWIST_JOINT_SOFTNESS = 3

Joint3D 的扭曲弹性,如果太低,就需要更大的力才能扭曲关节。

ConeTwistJointParam CONE_TWIST_JOINT_RELAXATION = 4

定义两侧的摆动速度和扭转速度差异同步的速度。


enum G6DOFJointAxisParam:

G6DOFJointAxisParam G6DOF_JOINT_LINEAR_LOWER_LIMIT = 0

轴心点的轴之间的最小差异。

G6DOFJointAxisParam G6DOF_JOINT_LINEAR_UPPER_LIMIT = 1

轴心点的轴之间的最大差异。

G6DOFJointAxisParam G6DOF_JOINT_LINEAR_LIMIT_SOFTNESS = 2

应用于跨轴移动的因子。越低,运动越慢。

G6DOFJointAxisParam G6DOF_JOINT_LINEAR_RESTITUTION = 3

轴运动的恢复量。速度越低,能量损失越多。

G6DOFJointAxisParam G6DOF_JOINT_LINEAR_DAMPING = 4

发生在跨轴线性运动的阻尼量。

G6DOFJointAxisParam G6DOF_JOINT_LINEAR_MOTOR_TARGET_VELOCITY = 5

关节的线性马达试图达到的速度。

G6DOFJointAxisParam G6DOF_JOINT_LINEAR_MOTOR_FORCE_LIMIT = 6

线性马达在试图达到目标速度时可以施加的最大力。

G6DOFJointAxisParam G6DOF_JOINT_ANGULAR_LOWER_LIMIT = 10

负方向的最小旋转,以脱离和绕轴旋转。

G6DOFJointAxisParam G6DOF_JOINT_ANGULAR_UPPER_LIMIT = 11

正方向的最小旋转,以挣脱和绕轴旋转。

G6DOFJointAxisParam G6DOF_JOINT_ANGULAR_LIMIT_SOFTNESS = 12

乘以所有轴旋转的因子。

G6DOFJointAxisParam G6DOF_JOINT_ANGULAR_DAMPING = 13

跨该轴的旋转阻尼量。值越低,发生的阻尼就越多。

G6DOFJointAxisParam G6DOF_JOINT_ANGULAR_RESTITUTION = 14

在各轴上的旋转恢复量。值越低,发生的恢复量越大。

G6DOFJointAxisParam G6DOF_JOINT_ANGULAR_FORCE_LIMIT = 15

围绕 Z 轴旋转时,可能发生的最大力。

G6DOFJointAxisParam G6DOF_JOINT_