RigidBody¶
Inherits: PhysicsBody < CollisionObject < Spatial < Node < Object
继承人: VehicleBody
类别: 核心
简要说明¶
在三维空间中通过物理模拟确定其位置的物理体。
属性¶
-1.0 |
||
矢量3(0,0,0) |
||
假 |
||
假 |
||
假 |
||
假 |
||
假 |
||
假 |
||
真 |
||
假 |
||
0 |
||
假 |
||
假 |
||
1.0 |
||
-1.0 |
||
矢量3(0,0,0) |
||
1.0 |
||
0 |
||
假 |
||
9.8 |
方法¶
无效 |
_integrate_forces ( PhysicsDirectBodyState state ) virtual |
无效 |
add_central_force ( Vector3 force ) |
无效 |
|
无效 |
add_torque ( Vector3 torque ) |
无效 |
apply_central_impulse ( Vector3 impulse ) |
无效 |
apply_impulse ( Vector3 position, Vector3 impulse ) |
无效 |
apply_torque_impulse ( Vector3 impulse ) |
get_axis_lock ( BodyAxis axis ) const |
|
get_colliding_bodies ( ) const |
|
无效 |
set_axis_lock ( BodyAxis axis, bool lock ) |
无效 |
set_axis_velocity ( Vector3 axis_velocity ) |
信号¶
body_entered ( Node body )
当一个物体与这个物体接触时发出的。必须启用“联系人监视器”和“报告的联系人”才能使其工作。
body_exited ( Node body )
当一个体形与此体形接触时发出。必须启用“联系人监视器”和“报告的联系人”才能使其工作。
当一个物体与这个物体接触时发出的。必须启用“联系人监视器”和“报告的联系人”才能使其工作。
This signal not only receives the body that collided with this one, but also its RID (body_id
), the shape index from the colliding body (body_shape
), and the shape index from this body (local_shape
) the other body collided with.
当一个体形与此体形接触时发出。必须启用“联系人监视器”和“报告的联系人”才能使其工作。
This signal not only receives the body that stopped colliding with this one, but also its RID (body_id
), the shape index from the colliding body (body_shape
), and the shape index from this body (local_shape
) the other body stopped colliding with.
sleeping_state_changed ( )
当身体改变其睡眠状态时发出。无论是睡觉还是醒来。
枚举¶
枚举 Mode :
MODE_RIGID = 0 ---刚体模式。这是刚体的“自然”状态。它受力的影响,可以移动、旋转和受用户代码的影响。
MODE_STATIC = 1 ---静态模式。身体的行为就像 StaticBody ,只能按用户代码移动。
MODE_CHARACTER = 2 ---字符体模式。这表现得像一个刚体,但不能旋转。
MODE_KINEMATIC = 3 ——运动体模式。身体的行为就像 KinematicBody ,只能按用户代码移动。
描述¶
这是实现完整三维物理的节点。这意味着你不能直接控制一个刚体。相反,您可以对其施加力(重力、脉冲等),物理模拟将计算产生的运动、碰撞、反弹、旋转等。
刚体有4种行为 mode S:刚性、静态、特征和运动学。
注: 不要在每一个框架上或经常改变一个刚体的位置。零星的更改可以很好地工作,但是物理运行的粒度(固定的hz)与通常的呈现(进程回调)不同,甚至可能在单独的线程中运行,因此从进程循环更改此粒度可能会导致奇怪的行为。如果你需要直接影响身体的状态,使用 _integrate_forces ,允许您直接访问物理状态。
如果需要覆盖默认物理行为,可以编写自定义的力集成函数。见 custom_integrator .
属性描述¶
float angular_damp
违约 |
-1.0 |
设定器 |
设置角度阻尼(值) |
吸气剂 |
得到角阻尼 |
阻尼刚体的旋转力。
Vector3 angular_velocity
违约 |
矢量3(0,0,0) |
设定器 |
设置角速度(值) |
吸气剂 |
得到角速度 |
刚体的旋转速度。
bool axis_lock_angular_x
违约 |
假 |
设定器 |
设置轴锁定(值) |
吸气剂 |
获取轴锁定() |
锁定物体在X轴上的旋转。
bool axis_lock_angular_y
违约 |
假 |
设定器 |
设置轴锁定(值) |
吸气剂 |
获取轴锁定() |
锁定主体在Y轴上的旋转。
bool axis_lock_angular_z
违约 |
假 |
设定器 |
设置轴锁定(值) |
吸气剂 |
获取轴锁定() |
锁定物体在Z轴上的旋转。
bool axis_lock_linear_x
违约 |
假 |
设定器 |
设置轴锁定(值) |
吸气剂 |
获取轴锁定() |
锁定物体在X轴上的运动。
bool axis_lock_linear_y
违约 |
假 |
设定器 |
设置轴锁定(值) |
吸气剂 |
获取轴锁定() |
锁定物体在Y轴上的运动。
bool axis_lock_linear_z
违约 |
假 |
设定器 |
设置轴锁定(值) |
吸气剂 |
获取轴锁定() |
锁定物体在Z轴上的运动。
float bounce
设定器 |
设置反弹(值) |
吸气剂 |
获得反弹()) |
身体的弹性。值的范围从 0
(没有弹跳)到 1
(充满弹性)。
弃用,使用 PhysicsMaterial.bounce 而是通过 physics_material_override .
bool can_sleep
违约 |
真 |
设定器 |
设置可以睡眠(值) |
吸气剂 |
你能入睡吗? |
如果 true
在没有移动的情况下,刚性体不会计算力,而是作为静止体。当通过其他碰撞施加力或当 apply_impulse
方法。
bool contact_monitor
违约 |
假 |
设定器 |
设置触点监视器(值) |
吸气剂 |
_contact_monitor_enabled()是否已启用? |
如果 true
当与另一个刚体碰撞时,该刚体将发出信号。
int contacts_reported
违约 |
0 |
设定器 |
设置“已报告的最大联系人”(值) |
吸气剂 |
获取已报告的最大联系人 |
要报告的最大联系人数。正文可以保存与其他正文的联系人的日志,这是通过设置报告给大于0的数字的联系人的最大数量来启用的。
bool continuous_cd
违约 |
假 |
设定器 |
设置使用连续碰撞检测(值) |
吸气剂 |
正在使用连续碰撞检测 |
如果 true
,使用连续碰撞检测。
连续碰撞检测试图预测运动物体将在何处碰撞,而不是移动它,并在碰撞时纠正它的运动。连续碰撞检测更为精确,错过的小型快速移动物体的碰撞更少。不使用连续碰撞检测的计算速度更快,但可能会错过小的、快速移动的对象。
bool custom_integrator
违约 |
假 |
设定器 |
设置使用自定义积分器(值) |
吸气剂 |
_是否使用自定义_积分器( |
如果 true
,此机构的内力集成将被禁用(如重力或空气摩擦)。除了碰撞响应外,车身只会根据 _integrate_forces 函数(如果定义)。
float friction
设定器 |
设置摩擦(值) |
吸气剂 |
得到摩擦 |
物体的摩擦力,从0(无摩擦)到1(最大摩擦力)。
弃用,使用 PhysicsMaterial.friction 而是通过 physics_material_override .
float gravity_scale
违约 |
1.0 |
设定器 |
设置重力标度(值) |
吸气剂 |
得到重力标度 |
这将乘以中的全局三维重力设置 Project > Project Settings > Physics > 3d 产生刚体的重力。例如,值1为法向重力,2为双重力,0.5为半重力。
float linear_damp
违约 |
-1.0 |
设定器 |
设置线性阻尼(值) |
吸气剂 |
得到线性阻尼 |
身体的线性潮湿。不能小于-1.0。如果该值与-1.0不同,则从世界或区域派生的任何线性阻尼都将被覆盖。
Vector3 linear_velocity
违约 |
矢量3(0,0,0) |
设定器 |
设置线性速度(值) |
吸气剂 |
得到线性速度 |
物体的线速度。可以偶尔使用,但 不要每帧都设置这个 ,因为物理可以在另一个线程中运行,并以不同的粒度运行。使用 _integrate_forces 作为精确控制身体状态的过程循环。
float mass
违约 |
1.0 |
设定器 |
设置质量(值) |
吸气剂 |
获取质量() |
身体的质量。
Mode mode
违约 |
0 |
设定器 |
设置模式(值) |
吸气剂 |
获取_模式() |
身体模式。见 Mode 对于可能的值。
PhysicsMaterial physics_material_override
设定器 |
设置物理材料覆盖(值) |
吸气剂 |
获取物理材料覆盖 |
bool sleeping
违约 |
假 |
设定器 |
设置睡眠(值) |
吸气剂 |
你在睡觉吗? |
如果 true
,身体正在睡觉,直到被碰撞或 apply_impulse
方法。
float weight
违约 |
9.8 |
设定器 |
设置重量(值) |
吸气剂 |
获得重量() |
物体的重量基于其质量和全球三维重力。全局值设置在 Project > Project Settings > Physics > 3d .
方法说明¶
void _integrate_forces ( PhysicsDirectBodyState state ) virtual
在物理处理期间调用,允许您读取并安全地修改对象的模拟状态。默认情况下,它除了正常的物理行为外还工作,但是 custom_integrator 属性允许您禁用默认行为并为主体执行完全自定义的强制集成。
void add_central_force ( Vector3 force )
在不影响旋转的情况下添加恒定的方向力。
这相当于 add_force(force, Vector3(0,0,0))
.
增加恒定力(即加速度)。
void add_torque ( Vector3 torque )
在不影响位置的情况下添加恒定的旋转力(即电机)。
void apply_central_impulse ( Vector3 impulse )
在不影响旋转的情况下应用定向脉冲。
这相当于 apply_impulse(Vector3(0,0,0), impulse)
.
对身体施加定位脉冲。冲动与时间无关!施加一个脉冲,每帧都会产生一个与帧速率相关的力。因此,只能在模拟一次性影响时使用。位置使用全局坐标系的旋转,但以对象的原点为中心。
void apply_torque_impulse ( Vector3 impulse )
施加扭矩脉冲,该脉冲将受到车身质量和形状的影响。这将围绕 impulse
矢量通过。
Array get_colliding_bodies ( ) const
返回与此实体碰撞的实体列表。默认情况下,报告的最大联系人数为0,请参见 contacts_reported 属性来增加它。
注: 移动对象后,此测试的结果不会立即显示。对于性能,碰撞列表每帧更新一次,并在物理步骤之前更新。考虑改用信号。
void set_axis_velocity ( Vector3 axis_velocity )
设置轴速度。给定矢量轴上的速度将设置为给定的矢量长度。这对跳跃行为很有用。