PhysicsServer3D¶
继承: Object
用于低级3D物理访问的服务器接口。
描述¶
物理服务器是负责所有3D物理的服务器。它可以直接创建和操作所有物理对象:
-一个空间是一个物理模拟的独立世界。它包含物体、区域和关节。它的状态可以查询碰撞和交叉信息,并且可以修改模拟的几个参数。
-形状是一个几何体,如球体、盒子、圆柱体或多边形。它可以通过将其添加到身体/区域来进行冲突检测,可能需要相对于身体/区域的原点进行额外的转换。身体/区域可以添加多个(转换)形状,单个形状可以通过不同的局部转换多次添加到身体/区域。
-body是一个物理对象,可以处于静态、运动学或刚性模式。它的状态(如位置和速度)可以查询和更新。可以设置力集成回调来自定义身体的物理。
-区域是空间中的一个区域,可用于检测进入和退出的物体和区域。可以设置身体监控回调以报告进入/退出的身体形状,同样可以设置区域监控回调。重力和阻尼可以通过设置区域参数在区域内覆盖。
-关节是两个物体之间或一个物体相对于一个点的约束。关节偏置和弹簧关节的静止长度等参数可以调整。
PhysicsServer3D中的物理对象可以独立创建和操作;它们不必绑定到场景树中的节点。
注意:所有3D物理节点都在内部使用物理服务器。在场景树中添加物理节点会导致在物理服务器中创建相应的物理对象。刚体节点注册一个回调,该回调用物理服务器中相应主体对象的变换更新节点的变换(每次物理更新)。区域节点注册一个回调,通知区域节点与物理服务器中相应区域对象的重叠。光线广播节点查询物理服务器中相关空间的直接状态。
方法¶
枚举¶
enum JointType: 🔗
JointType JOINT_TYPE_PIN = 0
JointType JOINT_TYPE_HINGE = 1
JointType JOINT_TYPE_SLIDER = 2
JointType JOINT_TYPE_CONE_TWIST = 3
JointType JOINT_TYPE_6DOF = 4
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
摆动是左右旋转,绕垂直于扭转轴的轴旋转。
摆动跨度定义了沿摆动轴旋转多少不会得到纠正。
可以在ConeTwistJoint中定义为松散。
如果低于0.05,则锁定此行为。
ConeTwistJointParam CONE_TWIST_JOINT_TWIST_SPAN = 1
扭转是围绕扭转轴的旋转,这个值定义了关节可以扭曲多远。
如果低于0.05,Twist被锁定。
ConeTwistJointParam CONE_TWIST_JOINT_BIAS = 2
摆动或扭转发生的速度。
越高,越快。
ConeTwistJointParam CONE_TWIST_JOINT_SOFTNESS = 3
Joint3D扭转的轻松程度,如果太低,则需要更多的力量来扭转关节。
ConeTwistJointParam CONE_TWIST_JOINT_RELAXATION = 4
定义双方的摇摆和twist-speed-difference同步的速度。
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_LINEAR_SPRING_STIFFNESS = 7
G6DOFJointAxisParam G6DOF_JOINT_LINEAR_SPRING_DAMPING = 8
G6DOFJointAxisParam G6DOF_JOINT_LINEAR_SPRING_EQUILIBRIUM_POINT = 9
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
绕轴旋转时可能发生的最大力。
G6DOFJointAxisParam G6DOF_JOINT_ANGULAR_ERP = 16
当校正轴上旋转的极限交叉时,这个误差容忍度因子定义了校正变慢的程度。越低,越慢。
G6DOFJointAxisParam G6DOF_JOINT_ANGULAR_MOTOR_TARGET_VELOCITY = 17
电机在轴上的目标速度。
G6DOFJointAxisParam G6DOF_JOINT_ANGULAR_MOTOR_FORCE_LIMIT = 18
电机在轴上的最大加速度。
G6DOFJointAxisParam G6DOF_JOINT_ANGULAR_SPRING_STIFFNESS = 19
G6DOFJointAxisParam G6DOF_JOINT_ANGULAR_SPRING_DAMPING = 20
G6DOFJointAxisParam G6DOF_JOINT_ANGULAR_SPRING_EQUILIBRIUM_POINT = 21
G6DOFJointAxisParam G6DOF_JOINT_MAX = 22
表示G6DOFJointAxisParam枚举的大小。
enum G6DOFJointAxisFlag: 🔗
G6DOFJointAxisFlag G6DOF_JOINT_FLAG_ENABLE_LINEAR_LIMIT = 0
如果设定,线性运动是可能在给定的限制。
G6DOFJointAxisFlag G6DOF_JOINT_FLAG_ENABLE_ANGULAR_LIMIT = 1
如果设置,旋转运动是可能的。
G6DOFJointAxisFlag G6DOF_JOINT_FLAG_ENABLE_ANGULAR_SPRING = 2
G6DOFJointAxisFlag G6DOF_JOINT_FLAG_ENABLE_LINEAR_SPRING = 3
G6DOFJointAxisFlag G6DOF_JOINT_FLAG_ENABLE_MOTOR = 4
如果设置好,则在这些轴上有一个旋转电机。
G6DOFJointAxisFlag G6DOF_JOINT_FLAG_ENABLE_LINEAR_MOTOR = 5
如果设置,则此轴上有一个线性电机,以特定速度为目标。
G6DOFJointAxisFlag G6DOF_JOINT_FLAG_MAX = 6
表示G6DOFJointAxisFlag枚举的大小。
enum ShapeType: 🔗
ShapeType SHAPE_WORLD_BOUNDARY = 0
ShapeType SHAPE_SEPARATION_RAY = 1
ShapeType SHAPE_SPHERE = 2
ShapeType SHAPE_BOX = 3
ShapeType SHAPE_CAPSULE = 4
ShapeType SHAPE_CYLINDER = 5
ShapeType SHAPE_CONVEX_POLYGON = 6
ShapeType SHAPE_CONCAVE_POLYGON = 7
Shape3D是ConcavePolygonShape3D。
ShapeType SHAPE_HEIGHTMAP = 8
ShapeType SHAPE_SOFT_BODY = 9
Shape3D在内部用于软体。任何创建这种形状的尝试都会导致错误。
ShapeType SHAPE_CUSTOM = 10
此常量由引擎内部使用。任何创建这种形状的尝试都会导致错误。
enum AreaParameter: 🔗
AreaParameter AREA_PARAM_GRAVITY_OVERRIDE_MODE = 0
常量以设置/获取区域中的重力覆盖模式。有关可能的值,请参见AreaSpaceOverrideMode。
AreaParameter AREA_PARAM_GRAVITY = 1
在一个区域设置/获得重力强度的常数。
AreaParameter AREA_PARAM_GRAVITY_VECTOR = 2
常数以设置/获取区域的重力矢量/中心。
AreaParameter AREA_PARAM_GRAVITY_IS_POINT = 3
常数,用于设置/获取区域的重力矢量是方向还是中心点。
AreaParameter AREA_PARAM_GRAVITY_POINT_UNIT_DISTANCE = 4
常数来设置/获得重力强度等于由AREA_PARAM_GRAVITY控制的重力的距离。例如,在半径100米、表面重力为4.0 m/s²的行星上,将重力设置为4.0,将单位距离设置为100.0。重力将根据平方反比定律衰减,因此在示例中,距离中心200米处的重力将为1.0 m/s²(距离的两倍,重力的1/4),在50米处将为16.0 m/s²(距离的一半,重力的4倍),依此类推。
只有当单位距离为正数时,上述情况才成立。当此设置为0.0时,无论距离如何,重力都将是恒定的。
AreaParameter AREA_PARAM_LINEAR_DAMP_OVERRIDE_MODE = 5
常数以设置/获取区域中的线性阻尼覆盖模式。有关可能的值,请参见AreaSpaceOverrideMode。
AreaParameter AREA_PARAM_LINEAR_DAMP = 6
常数以设置/获取区域的线性阻尼因子。
AreaParameter AREA_PARAM_ANGULAR_DAMP_OVERRIDE_MODE = 7
常量以设置/获取区域中的角阻尼覆盖模式。有关可能的值,请参见AreaSpaceOverrideMode。
AreaParameter AREA_PARAM_ANGULAR_DAMP = 8
常数以设置/获取区域的角阻尼因子。
AreaParameter AREA_PARAM_PRIORITY = 9
设置/获取区域的优先级(处理顺序)的常量。
AreaParameter AREA_PARAM_WIND_FORCE_MAGNITUDE = 10
常数以设置/获取特定区域风力的大小。此风力仅适用于SoftBulk节点。其他物理体目前不受风的影响。
AreaParameter AREA_PARAM_WIND_SOURCE = 11
常数以设置/获取指定特定区域风的原点的3D矢量。
AreaParameter AREA_PARAM_WIND_DIRECTION = 12
常数以设置/获取指定特定区域风吹向的3D矢量。
AreaParameter AREA_PARAM_WIND_ATTENUATION_FACTOR = 13
常数,以设置/获取风力随距离其原点的距离而减小的指数率。
enum AreaSpaceOverrideMode: 🔗
AreaSpaceOverrideMode AREA_SPACE_OVERRIDE_DISABLED = 0
该区域不影响重力/潮湿。这些区域通常仅用于检测碰撞以及进入或离开碰撞的物体。
AreaSpaceOverrideMode AREA_SPACE_OVERRIDE_COMBINE = 1
这个区域将其重力/阻尼值添加到迄今为止计算的任何值中。这样,许多重叠的区域可以结合它们的物理特性来产生有趣的效果。
AreaSpaceOverrideMode AREA_SPACE_OVERRIDE_COMBINE_REPLACE = 2
该区域将其重力/阻尼值添加到迄今为止计算的任何值中。然后停止考虑其余区域,即使是默认区域。
AreaSpaceOverrideMode AREA_SPACE_OVERRIDE_REPLACE = 3
这个区域取代了任何重力/潮湿,即使是默认的,并停止考虑其余区域。
AreaSpaceOverrideMode AREA_SPACE_OVERRIDE_REPLACE_COMBINE = 4
这个区域取代了迄今为止计算的任何重力/阻尼,但继续计算其余区域,直到默认区域。
enum BodyMode: 🔗
BodyMode BODY_MODE_STATIC = 0
静态体的常量。在此模式下,主体只能由用户代码移动,移动时不会与沿其路径的其他主体发生冲突。
BodyMode BODY_MODE_KINEMATIC = 1
对于运动学体常数。在此模式下,主体只能由用户代码移动并沿其路径与其他主体碰撞。
BodyMode BODY_MODE_RIGID = 2
对于刚体恒定。在这种模式下,一个物体可以被其他物体推动并施加力。
BodyMode BODY_MODE_RIGID_LINEAR = 3
线性刚体的常数。在这种模式下,物体不能旋转,只有其线速度受到外力的影响。
enum BodyParameter: 🔗
BodyParameter BODY_PARAM_BOUNCE = 0
常数以设置/获取身体的反弹系数。
BodyParameter BODY_PARAM_FRICTION = 1
常数来设置/获得物体的摩擦力。
BodyParameter BODY_PARAM_MASS = 2
设定/获得物体质量的常数。
BodyParameter BODY_PARAM_INERTIA = 3
设置/获得物体惯性的常数。
BodyParameter BODY_PARAM_CENTER_OF_MASS = 4
常数以设置/获得身体的质心在身体局部坐标系中的位置。
BodyParameter BODY_PARAM_GRAVITY_SCALE = 5
常数来设置/获得物体的重力倍增器。
BodyParameter BODY_PARAM_LINEAR_DAMP_MODE = 6
常数以设置/获取物体的线性阻尼模式。有关可能的值,请参阅BodyDampMode。
BodyParameter BODY_PARAM_ANGULAR_DAMP_MODE = 7
常数以设置/获取物体的角阻尼模式。有关可能的值,请参阅BodyDampMode。
BodyParameter BODY_PARAM_LINEAR_DAMP = 8
常数以设置/获取物体的线性阻尼因子。
BodyParameter BODY_PARAM_ANGULAR_DAMP = 9
常数以设置/获取物体的角阻尼因子。
BodyParameter BODY_PARAM_MAX = 10
表示BodyParameter枚举的大小。
enum BodyDampMode: 🔗
BodyDampMode BODY_DAMP_MODE_COMBINE = 0
车身的阻尼值被添加到区域中设置的任何值或默认值。
BodyDampMode BODY_DAMP_MODE_REPLACE = 1
主体的阻尼值替换区域中设置的任何值或默认值。
enum BodyState: 🔗
BodyState BODY_STATE_TRANSFORM = 0
常数来设置/获取主体的当前变换矩阵。
BodyState BODY_STATE_LINEAR_VELOCITY = 1
常数以设置/获取物体的当前线速度。
BodyState BODY_STATE_ANGULAR_VELOCITY = 2
常数来设置/获取物体的当前角速度。
BodyState BODY_STATE_SLEEPING = 3
恒定的睡眠/唤醒一个身体,或者得到它是否在睡觉。
BodyState BODY_STATE_CAN_SLEEP = 4
常数来设置/获取身体是否可以睡眠。
enum AreaBodyStatus: 🔗
AreaBodyStatus AREA_BODY_ADDED = 0
当对象输入其形状之一时,接收第一个参数和区域回调函数的值。
AreaBodyStatus AREA_BODY_REMOVED = 1
当对象退出其形状之一时,接收第一个参数和区域回调函数的值。
enum ProcessInfo: 🔗
ProcessInfo INFO_ACTIVE_OBJECTS = 0
常数来获取不睡眠的对象的数量。
ProcessInfo INFO_COLLISION_PAIRS = 1
常数以获得可能的碰撞次数。
ProcessInfo INFO_ISLAND_COUNT = 2
常数以获取可能发生碰撞的空间区域的数量。
enum SpaceParameter: 🔗
SpaceParameter SPACE_PARAM_CONTACT_RECYCLE_RADIUS = 0
常数来设置/获取一对物体在必须重新计算碰撞状态之前必须移动的最大距离。
SpaceParameter SPACE_PARAM_CONTACT_MAX_SEPARATION = 1
常数,以设置/获得一个形状在被认为是分离的并且接触被丢弃之前可以与另一个形状的最大距离。
SpaceParameter SPACE_PARAM_CONTACT_MAX_ALLOWED_PENETRATION = 2
常数设置/获取一个形状在被认为是碰撞之前可以穿透另一个形状的最大距离。
SpaceParameter SPACE_PARAM_CONTACT_DEFAULT_BIAS = 3
常量设置/获取所有物理触点的默认求解器偏差。求解器偏差是控制两个对象在重叠后“反弹”多少的因素,以避免由于数值不精确而使它们处于该状态。
SpaceParameter SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD = 4
设置/获得活动的阈值线速度的常数。线性和角速度都标记为潜在不活动的物体将在给定时间后进入睡眠状态。
SpaceParameter SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD = 5
设置/获取活动的阈值角速度的常数。线性和角速度都标记为潜在不活动的物体将在给定时间后进入睡眠状态。
SpaceParameter SPACE_PARAM_BODY_TIME_TO_SLEEP = 6
设置/获取最大活动时间的常数。线性和角速度都标记为潜在不活动的物体将在此时间之后进入睡眠状态。
SpaceParameter SPACE_PARAM_SOLVER_ITERATIONS = 7
设置/获取接触和约束的求解器迭代次数的常量。迭代次数越多,碰撞和约束就越准确。然而,更多的迭代需要更多的CPU能力,这会降低性能。
enum BodyAxis: 🔗
BodyAxis BODY_AXIS_LINEAR_X = 1
BodyAxis BODY_AXIS_LINEAR_Y = 2
BodyAxis BODY_AXIS_LINEAR_Z = 4
BodyAxis BODY_AXIS_ANGULAR_X = 8
BodyAxis BODY_AXIS_ANGULAR_Y = 16
BodyAxis BODY_AXIS_ANGULAR_Z = 32
方法说明¶
void area_add_shape(area: RID, shape: RID, transform: Transform3D = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0), disabled: bool = false) 🔗
向区域添加形状以及变换矩阵。形状通常由其索引引用,因此您应该跟踪哪个形状具有给定的索引。
void area_attach_object_instance_id(area: RID, id: int) 🔗
将区域分配给Object的后代,以便它可以存在于节点树中。
void area_clear_shapes(area: RID) 🔗
从区域中删除所有形状。它不会删除形状,因此以后可以重新分配它们。
在物理服务器中创建一个3D区域对象,并返回标识它的RID。创建区域的默认设置包括设置为1的冲突层和掩码,以及设置为false的可监控。
使用area_add_shape()向其添加形状,使用area_set_transform()设置其变换,使用area_set_space()将区域添加到空间。如果您希望区域可检测,请使用area_set_monitorable()。
int area_get_collision_layer(area: RID) const 🔗
返回一个区域所属的一个或多个物理层。
int area_get_collision_mask(area: RID) const 🔗
返回一个区域可以接触的一个或多个物理层。
int area_get_object_instance_id(area: RID) const 🔗
获取分配区域的对象的实例ID。
Variant area_get_param(area: RID, param: AreaParameter) const 🔗
返回一个区域参数值。可用参数列表位于AreaParameter常量上。
RID area_get_shape(area: RID, shape_idx: int) const 🔗
返回区域第n个形状的RID。
int area_get_shape_count(area: RID) const 🔗
返回分配给区域的形状数。
Transform3D area_get_shape_transform(area: RID, shape_idx: int) const 🔗
返回区域内形状的变换矩阵。
RID area_get_space(area: RID) const 🔗
返回分配给区域的空间。
Transform3D area_get_transform(area: RID) const 🔗
返回区域的变换矩阵。
void area_remove_shape(area: RID, shape_idx: int) 🔗
从区域中删除形状。它不会删除形状,因此可以稍后重新分配。
void area_set_area_monitor_callback(area: RID, callback: Callable) 🔗
设置区域的区域监视器回调。当任何其他(形状的)区域进入或退出(形状的)给定区域时,将调用此回调,并且必须采用以下五个参数:
1.整数status:AREA_BODY_ADDED或AREA_BODY_REMOVED,取决于另一个区域的形状是进入还是退出该区域,
3.一个整数instance_id:附加到另一个区域的ObjectID,
4.一个整数area_shape_idx:进入或退出该区域的其他区域的形状的索引,
5.一个整数self_shape_idx:另一个区域进入或退出的区域的形状索引。
通过计算(或跟踪)进入和退出的形状,可以确定一个区域(及其所有形状)是第一次进入还是最后一次退出。
void area_set_collision_layer(area: RID, layer: int) 🔗
将区域分配给一个或多个物理层。
void area_set_collision_mask(area: RID, mask: int) 🔗
设置区域将监视的物理层。
void area_set_monitor_callback(area: RID, callback: Callable) 🔗
设置区域的主体监视器回调。当任何其他(形状的)主体进入或退出(形状的)给定区域时,将调用此回调,并且必须采用以下五个参数:
1.整数status:AREA_BODY_ADDED或AREA_BODY_REMOVED,取决于另一个体型是进入还是离开该区域,
3.一个整数instance_id:附着在身体上的ObjectID,
4.一个整数body_shape_idx:进入或离开该区域的物体形状的索引,
5.一个整数self_shape_idx:身体进入或退出的区域形状的索引。
通过计算(或跟踪)进入和退出的形状,可以确定一个主体(及其所有形状)是第一次进入还是最后一次退出。
void area_set_monitorable(area: RID, monitorable: bool) 🔗
void area_set_param(area: RID, param: AreaParameter, value: Variant) 🔗
设置区域参数的值。可用参数列表位于AreaParameter常量上。
void area_set_ray_pickable(area: RID, enable: bool) 🔗
设置可使用光线拾取的对象。
void area_set_shape(area: RID, shape_idx: int, shape: RID) 🔗
用另一个给定的区域形状替换。旧形状由其索引选择,新形状由其RID选择。
void area_set_shape_disabled(area: RID, shape_idx: int, disabled: bool) 🔗
void area_set_shape_transform(area: RID, shape_idx: int, transform: Transform3D) 🔗
设置区域形状的变换矩阵。
void area_set_space(area: RID, space: RID) 🔗
为该区域分配一个空间。
void area_set_transform(area: RID, transform: Transform3D) 🔗
设置区域的变换矩阵。
void body_add_collision_exception(body: RID, excepted_body: RID) 🔗
将主体添加到免于碰撞的主体列表中。
void body_add_constant_central_force(body: RID, force: Vector3) 🔗
在不影响旋转的情况下添加恒定的方向力,该方向力随着时间的推移不断施加,直到使用body_set_constant_force(body, Vector3(0,0,0))清除。
这相当于在身体质心处使用body_add_constant_force()。
void body_add_constant_force(body: RID, force: Vector3, position: Vector3 = Vector3(0, 0, 0)) 🔗
向身体添加一个恒定的定位力,随着时间的推移不断施加,直到用body_set_constant_force(body, Vector3(0,0,0))清除。
position是在全局坐标中与物体原点的偏移量。
void body_add_constant_torque(body: RID, torque: Vector3) 🔗
添加恒定的旋转力而不影响位置,该力随着时间的推移不断施加,直到使用body_set_constant_torque(body, Vector3(0,0,0))清除。
void body_add_shape(body: RID, shape: RID, transform: Transform3D = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0), disabled: bool = false) 🔗
将形状与变换矩阵一起添加到主体。形状通常由其索引引用,因此您应该跟踪哪个形状具有给定的索引。
void body_apply_central_force(body: RID, force: Vector3) 🔗
在不影响旋转的情况下施加定向力。力与时间相关,意味着每次物理更新都要施加。
这相当于在身体质心处使用body_apply_force()。
void body_apply_central_impulse(body: RID, impulse: Vector3) 🔗
在不影响旋转的情况下应用方向脉冲。
脉冲是与时间无关的!每帧应用一个脉冲将导致帧速率相关的力。因此,它应该只在模拟一次性撞击时使用(否则使用“_force”功能)。
这相当于在身体质心处使用body_apply_impulse()。
void body_apply_force(body: RID, force: Vector3, position: Vector3 = Vector3(0, 0, 0)) 🔗
对身体施加定位力。力是时间相关的,意味着每次物理更新都要施加。
position是在全局坐标中与物体原点的偏移量。
void body_apply_impulse(body: RID, impulse: Vector3, position: Vector3 = Vector3(0, 0, 0)) 🔗
对身体施加定位脉冲。
脉冲是与时间无关的!每帧应用一个脉冲将导致帧速率相关的力。因此,它应该只在模拟一次性撞击时使用(否则使用“_force”功能)。
position是在全局坐标中与物体原点的偏移量。
void body_apply_torque(body: RID, torque: Vector3) 🔗
在不影响位置的情况下施加旋转力。力是时间相关的,意味着每次物理更新都要施加力。
void body_apply_torque_impulse(body: RID, impulse: Vector3) 🔗
在不影响位置的情况下对身体施加旋转脉冲。
脉冲是与时间无关的!每帧应用一个脉冲将导致帧速率相关的力。因此,它应该只在模拟一次性撞击时使用(否则使用“_force”功能)。
void body_attach_object_instance_id(body: RID, id: int) 🔗
将区域分配给Object的后代,以便它可以存在于节点树中。
void body_clear_shapes(body: RID) 🔗
从主体中删除所有形状。
在物理服务器中创建一个3D主体对象,并返回标识它的RID。创建区域的默认设置包括设置为1的冲突层和掩码,以及设置为BODY_MODE_RIGID的主体模式。
使用body_add_shape()向其添加形状,使用body_set_state()设置其变换,使用body_set_space()向空间添加主体。
int body_get_collision_layer(body: RID) const 🔗
返回主体所属的一个或多个物理层。
int body_get_collision_mask(body: RID) const 🔗
返回物体可以碰撞的一个或多个物理层。
float body_get_collision_priority(body: RID) const 🔗
返回主体的碰撞优先级。
Vector3 body_get_constant_force(body: RID) const 🔗
返回在每次物理更新期间施加的身体的总恒定位置力。
参见body_add_constant_force()和body_add_constant_central_force()。
Vector3 body_get_constant_torque(body: RID) const 🔗
返回在每次物理更新期间施加的物体的总恒定旋转力。
PhysicsDirectBodyState3D body_get_direct_state(body: RID) 🔗
返回主体的PhysicsDirectBodyState3D。如果主体被销毁或从物理空间中移除,则返回null。
int body_get_max_contacts_reported(body: RID) const 🔗
返回可以报告的最大联系人。请参见body_set_max_contacts_reported()。
BodyMode body_get_mode(body: RID) const 🔗
返回正文模式。
int body_get_object_instance_id(body: RID) const 🔗
获取分配区域的对象的实例ID。
Variant body_get_param(body: RID, param: BodyParameter) const 🔗
返回主体参数的值。可用参数列表位于BodyParameter常量上。
RID body_get_shape(body: RID, shape_idx: int) const 🔗
返回主体第n个形状的RID。
int body_get_shape_count(body: RID) const 🔗
返回分配给主体的形状数。
Transform3D body_get_shape_transform(body: RID, shape_idx: int) const 🔗
返回身体形状的变换矩阵。
RID body_get_space(body: RID) const 🔗
返回分配给主体的空间的RID。
Variant body_get_state(body: RID, state: BodyState) const 🔗
返回身体状态。
bool body_is_axis_locked(body: RID, axis: BodyAxis) const 🔗
bool body_is_continuous_collision_detection_enabled(body: RID) const 🔗
如果true,则启用连续冲突检测模式。
bool body_is_omitting_force_integration(body: RID) const 🔗
如果主体省略了标准力积分,则返回true。参见body_set_omit_force_integration()。
void body_remove_collision_exception(body: RID, excepted_body: RID) 🔗
从免于碰撞的主体列表中删除主体。
连续冲突检测试图预测一个移动的物体将在哪里碰撞,而不是移动它并在它碰撞时纠正它的运动。
void body_remove_shape(body: RID, shape_idx: int) 🔗
从主体中删除形状。该形状不会被删除,因此之后可以重复使用。
void body_reset_mass_properties(body: RID) 🔗
根据形状恢复默认惯性和质心,以取消之前使用body_set_param()设置的任何自定义值。
void body_set_axis_lock(body: RID, axis: BodyAxis, lock: bool) 🔗
void body_set_axis_velocity(body: RID, axis_velocity: Vector3) 🔗
设置轴速度。给定矢量轴上的速度将设置为给定矢量长度。这对跳跃行为很有用。
void body_set_collision_layer(body: RID, layer: int) 🔗
设置主体所属的一个或多个物理层。
void body_set_collision_mask(body: RID, mask: int) 🔗
设置物体可以碰撞的物理层或多个层。
void body_set_collision_priority(body: RID, priority: float) 🔗
设置主体的碰撞优先级。
void body_set_constant_force(body: RID, force: Vector3) 🔗
设置在每次物理更新期间施加的身体总恒定位置力。
参见body_add_constant_force()和body_add_constant_central_force()。
void body_set_constant_torque(body: RID, torque: Vector3) 🔗
设置在每次物理更新期间应用的身体的总恒定旋转力。
void body_set_enable_continuous_collision_detection(body: RID, enable: bool) 🔗
如果true,则启用连续冲突检测模式。
连续冲突检测试图预测一个移动的物体将在哪里碰撞,而不是移动它并在它碰撞时纠正它的运动。
void body_set_force_integration_callback(body: RID, callable: Callable, userdata: Variant = null) 🔗
将主体的自定义力集成回调函数设置为callable。使用空的Callable(Callable())清除自定义回调。
函数callable将在标准力积分之前调用每个物理刻度(参见body_set_omit_force_integration())。例如,它可以用于根据与其他物体的接触来更新物体的线性和角速度。
如果userdata不是null,则函数callable必须采用以下两个参数:
1.state:一个PhysicsDirectBodyState3D,用于检索和修改body的状态,
2.userdata: aVariant;它的值将是传递给此方法的userdata。
如果userdata为null,则callable必须只接受state参数。
void body_set_max_contacts_reported(body: RID, amount: int) 🔗
设置要报告的最大联系人。机构可以保留与其他机构的联系人日志。这是通过将报告的最大联系人数设置为大于0来启用的。
void body_set_mode(body: RID, mode: BodyMode) 🔗
从BodyMode常量之一设置body模式。
void body_set_omit_force_integration(body: RID, enable: bool) 🔗
设置身体是否省略标准力积分,如果enable为true,则身体不会自动使用施加的力、扭矩和阻尼来更新身体的线性和角速度,在这种情况下,可以使用body_set_force_integration_callback()来手动更新线性和角速度。
设置属性RigidBulk.custom_integrator时调用此方法。
void body_set_param(body: RID, param: BodyParameter, value: Variant) 🔗
设置主体参数。可用参数列表位于BodyParameter常量上。
void body_set_ray_pickable(body: RID, enable: bool) 🔗
如果设置了enable,则使用光线设置主体可拾取。
void body_set_shape(body: RID, shape_idx: int, shape: RID) 🔗
用另一个给定的身体形状替换。旧的形状由它的索引选择,新的形状由它的RID选择。
void body_set_shape_disabled(body: RID, shape_idx: int, disabled: bool) 🔗
void body_set_shape_transform(body: RID, shape_idx: int, transform: Transform3D) 🔗
设置身体形状的变换矩阵。
void body_set_space(body: RID, space: RID) 🔗
为主体分配一个空间(参见space_create())。
void body_set_state(body: RID, state: BodyState, value: Variant) 🔗
设置主体状态(请参阅BodyState常量)。
void body_set_state_sync_callback(body: RID, callable: Callable) 🔗
将主体的状态同步回调函数设置为callable。使用空的Callable(Callable())清除回调。
函数callable将在每个物理帧中调用,假设主体在前一个物理滴答期间处于活动状态,并可用于从物理服务器获取最新状态。
函数callable必须采用以下参数:
1.state:一个PhysicsDirectBodyState3D,用于检索body的状态。
bool body_test_motion(body: RID, parameters: PhysicsTestMotionParameters3D, result: PhysicsTestMotionResult3D = null) 🔗
如果从空间中的给定点沿运动矢量移动会导致碰撞,则返回true。PhysicsTestMotionParameters3D被传递给设置运动参数。PhysicsTestMotionResult3D可以被传递给返回其他信息。
RID concave_polygon_shape_create() 🔗
float cone_twist_joint_get_param(joint: RID, param: ConeTwistJointParam) const 🔗
获取cone_twist_joint参数(参见ConeTwistJointParam常量)。
void cone_twist_joint_set_param(joint: RID, param: ConeTwistJointParam, value: float) 🔗
设置cone_twist_joint参数(参见ConeTwistJointParam常量)。
RID convex_polygon_shape_create() 🔗
销毁物理服务器3D创建的任何对象。如果传递的RID不是物理服务器3D可以创建的对象之一,则会向控制台发送错误。
bool generic_6dof_joint_get_flag(joint: RID, axis: Axis, flag: G6DOFJointAxisFlag) const 🔗
返回通用6DOF联合标志的值。有关可用标志的列表,请参阅G6DOFJointAxisFlag。
float generic_6dof_joint_get_param(joint: RID, axis: Axis, param: G6DOFJointAxisParam) const 🔗
返回通用6DOF联合参数的值。有关可用参数的列表,请参阅G6DOFJointAxisParam。
void generic_6dof_joint_set_flag(joint: RID, axis: Axis, flag: G6DOFJointAxisFlag, enable: bool) 🔗
设置给定通用6DOF联合标志的值。有关可用标志的列表,请参阅G6DOFJointAxisFlag。
void generic_6dof_joint_set_param(joint: RID, axis: Axis, param: G6DOFJointAxisParam, value: float) 🔗
设置给定通用6DOF联合参数的值。有关可用参数的列表,请参阅G6DOFJointAxisParam。
int get_process_info(process_info: ProcessInfo) 🔗
返回有关3D物理引擎当前状态的信息。有关可用状态的列表,请参阅ProcessInfo。
RID heightmap_shape_create() 🔗
bool hinge_joint_get_flag(joint: RID, flag: HingeJointFlag) const 🔗
获取hinge_joint标志(请参阅HingeJointFlag常量)。
float hinge_joint_get_param(joint: RID, param: HingeJointParam) const 🔗
获取hinge_joint参数(参见HingeJointParam)。
void hinge_joint_set_flag(joint: RID, flag: HingeJointFlag, enabled: bool) 🔗
设置hinge_joint标志(参见HingeJointFlag常量)。
void hinge_joint_set_param(joint: RID, param: HingeJointParam, value: float) 🔗
设置hinge_joint参数(参见HingeJointParam常量)。
void joint_clear(joint: RID) 🔗
void joint_disable_collisions_between_bodies(joint: RID, disable: bool) 🔗
设置连接到JointBase的主体是否会相互碰撞。
int joint_get_solver_priority(joint: RID) const 🔗
获取Joint3D的优先级值。
JointType joint_get_type(joint: RID) const 🔗
返回Joint3D的类型。
bool joint_is_disabled_collisions_between_bodies(joint: RID) const 🔗
返回连接到JointBase的主体是否会相互碰撞。
void joint_make_cone_twist(joint: RID, body_A: RID, local_ref_A: Transform3D, body_B: RID, local_ref_B: Transform3D) 🔗
void joint_make_generic_6dof(joint: RID, body_A: RID, local_ref_A: Transform3D, body_B: RID, local_ref_B: Transform3D) 🔗
使关节成为通用六自由度(6DOF)关节。使用generic_6dof_joint_set_flag()和generic_6dof_joint_set_param()分别设置关节的标志和参数。
void joint_make_hinge(joint: RID, body_A: RID, hinge_A: Transform3D, body_B: RID, hinge_B: Transform3D) 🔗
void joint_make_pin(joint: RID, body_A: RID, local_A: Vector3, body_B: RID, local_B: Vector3) 🔗
void joint_make_slider(joint: RID, body_A: RID, local_ref_A: Transform3D, body_B: RID, local_ref_B: Transform3D) 🔗
void joint_set_solver_priority(joint: RID, priority: int) 🔗
设置Joint3D的优先级值。
Vector3 pin_joint_get_local_a(joint: RID) const 🔗
返回关节在关节主体a的局部空间中的位置。
Vector3 pin_joint_get_local_b(joint: RID) const 🔗
返回关节在关节体b的局部空间中的位置。
float pin_joint_get_param(joint: RID, param: PinJointParam) const 🔗
获取pin_joint参数(参见PinJointParam常量)。
void pin_joint_set_local_a(joint: RID, local_A: Vector3) 🔗
设置关节在关节主体a的局部空间中的位置。
void pin_joint_set_local_b(joint: RID, local_B: Vector3) 🔗
设置关节在关节主体b的局部空间中的位置。
void pin_joint_set_param(joint: RID, param: PinJointParam, value: float) 🔗
设置pin_joint参数(参见PinJointParam常量)。
RID separation_ray_shape_create() 🔗
void set_active(active: bool) 🔗
激活或停用3D物理引擎。
Variant shape_get_data(shape: RID) const 🔗
返回形状数据。
float shape_get_margin(shape: RID) const 🔗
返回形状的碰撞边距。
注意:这在i3D物理中不使用,因此将始终返回0。
ShapeType shape_get_type(shape: RID) const 🔗
返回形状的类型(请参阅ShapeType常量)。
void shape_set_data(shape: RID, data: Variant) 🔗
设置定义其形状和大小的形状数据。要传递的数据取决于创建的形状类型shape_get_type()。
void shape_set_margin(shape: RID, margin: float) 🔗
设置形状的碰撞边距。
注意:这在i3D物理中没有使用。
float slider_joint_get_param(joint: RID, param: SliderJointParam) const 🔗
获取slider_joint参数(参见SliderJointParam常量)。
void slider_joint_set_param(joint: RID, param: SliderJointParam, value: float) 🔗
获取slider_joint参数(参见SliderJointParam常量)。
void soft_body_add_collision_exception(body: RID, body_b: RID) 🔗
将给定的主体添加到免于碰撞的主体列表中。
创建一个新的软体并返回其内部RID。
AABB soft_body_get_bounds(body: RID) const 🔗
以全局坐标返回给定软体的边界。
int soft_body_get_collision_layer(body: RID) const 🔗
返回给定软体所属的一个或多个物理层。
int soft_body_get_collision_mask(body: RID) const 🔗
返回给定软体可以与之碰撞的一个或多个物理层。
float soft_body_get_damping_coefficient(body: RID) const 🔗
返回给定软体的阻尼系数。
float soft_body_get_drag_coefficient(body: RID) const 🔗
返回给定软体的阻力系数。
float soft_body_get_linear_stiffness(body: RID) const 🔗
返回给定软体的线性刚度。
Vector3 soft_body_get_point_global_position(body: RID, point_index: int) const 🔗
返回给定软体点在全局坐标中的当前位置。
float soft_body_get_pressure_coefficient(body: RID) const 🔗
返回给定软体的压力系数。
int soft_body_get_simulation_precision(body: RID) const 🔗
返回给定软体的模拟精度。
RID soft_body_get_space(body: RID) const 🔗
返回分配给给定软体的空间的RID。
Variant soft_body_get_state(body: RID, state: BodyState) const 🔗
返回给定的软体状态(请参阅BodyState常量)。
注意:i3D的默认物理实现不支持BODY_STATE_LINEAR_VELOCITY、BODY_STATE_ANGULAR_VELOCITY、BODY_STATE_SLEEPING或BODY_STATE_CAN_SLEEP。
float soft_body_get_total_mass(body: RID) const 🔗
返回分配给给定软体的总质量。
bool soft_body_is_point_pinned(body: RID, point_index: int) const 🔗
返回给定的软体点是否被固定。
void soft_body_move_point(body: RID, point_index: int, global_position: Vector3) 🔗
将给定的软体点移动到全局坐标中的位置。
void soft_body_pin_point(body: RID, point_index: int, pin: bool) 🔗
根据pin的值引脚或取消引脚给定的软体点。
注意:固定一个点可以有效地使它运动,防止它受到力的影响,但是你仍然可以使用soft_body_move_point()移动它。
void soft_body_remove_all_pinned_points(body: RID) 🔗
取消固定给定软体的所有点。
void soft_body_remove_collision_exception(body: RID, body_b: RID) 🔗
从免于碰撞的主体列表中删除给定的主体。
void soft_body_set_collision_layer(body: RID, layer: int) 🔗
设置给定软体所属的一个或多个物理层。
void soft_body_set_collision_mask(body: RID, mask: int) 🔗
设置给定软体可以碰撞的物理层或多个层。
void soft_body_set_damping_coefficient(body: RID, damping_coefficient: float) 🔗
设置给定软体的阻尼系数。当施加力时,较高的值将更明显地减慢身体。
void soft_body_set_drag_coefficient(body: RID, drag_coefficient: float) 🔗
设置给定软体的阻力系数。较高的值会增加该机构的空气阻力。
注意:i3D的默认物理实现当前未使用此值。
void soft_body_set_linear_stiffness(body: RID, stiffness: float) 🔗
设置给定软体的线性刚度。较高的值将导致较硬的体,而较低的值将增加体的弯曲能力。该值可以在0.0和1.0(包括)之间。
void soft_body_set_mesh(body: RID, mesh: RID) 🔗
设置给定软体的网格。
void soft_body_set_pressure_coefficient(body: RID, pressure_coefficient: float) 🔗
设置给定软体的压力系数。模拟该软体内部的压力积累。较高的值会增加此效果的强度。
void soft_body_set_ray_pickable(body: RID, enable: bool) 🔗
设置使用对象拾取时给定的软体是否可拾取。
void soft_body_set_simulation_precision(body: RID, simulation_precision: int) 🔗
设置给定软体的模拟精度。增加此值将改善生成的模拟,但会影响性能。小心使用。
void soft_body_set_space(body: RID, space: RID) 🔗
为给定的软体分配一个空间(参见space_create())。
void soft_body_set_state(body: RID, state: BodyState, variant: Variant) 🔗
设置给定主体的给定主体状态(请参阅BodyState常量)。
注意:i3D的默认物理实现不支持BODY_STATE_LINEAR_VELOCITY、BODY_STATE_ANGULAR_VELOCITY、BODY_STATE_SLEEPING或BODY_STATE_CAN_SLEEP。
void soft_body_set_total_mass(body: RID, total_mass: float) 🔗
设置给定软体的总质量。
void soft_body_set_transform(body: RID, transform: Transform3D) 🔗
设置给定软体的全局变换。
void soft_body_update_rendering_server(body: RID, rendering_server_handler: PhysicsServer3DRenderingServerHandler) 🔗
请求物理服务器通过rendering_server_handler接口使用给定软体点的最新位置更新渲染服务器。
创建空间。空间是物理引擎的参数集合,可以分配给区域或主体。它可以分配给具有area_set_space()的区域,也可以分配给具有body_set_space()的主体。
PhysicsDirectSpaceState3D space_get_direct_state(space: RID) 🔗
返回空间的状态,即PhysicsDirectSpaceState3D。此对象可用于进行碰撞/交集查询。
float space_get_param(space: RID, param: SpaceParameter) const 🔗
返回空间参数的值。
bool space_is_active(space: RID) const 🔗
返回空间是否处于活动状态。
void space_set_active(space: RID, active: bool) 🔗
将空间标记为活动。它不会产生影响,除非它被分配给一个区域或主体。
void space_set_param(space: RID, param: SpaceParameter, value: float) 🔗
设置空间参数的值。可用参数列表位于SpaceParameter常量上。