RigidBody

Inherits: PhysicsBody < CollisionObject < Spatial < Node < Object

继承人: VehicleBody

类别: 核心

简要说明

在三维空间中通过物理模拟确定其位置的物理体。

方法

无效

_integrate_forces ( PhysicsDirectBodyState state ) virtual

无效

add_central_force ( Vector3 force )

无效

add_force ( Vector3 force, Vector3 position )

无效

add_torque ( Vector3 torque )

无效

apply_central_impulse ( Vector3 impulse )

无效

apply_impulse ( Vector3 position, Vector3 impulse )

无效

apply_torque_impulse ( Vector3 impulse )

bool

get_axis_lock ( BodyAxis axis ) const

Array

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 )

当一个体形与此体形接触时发出。必须启用“联系人监视器”和“报告的联系人”才能使其工作。

  • body_shape_entered ( int body_id, Node body, int body_shape, int local_shape )

当一个物体与这个物体接触时发出的。必须启用“联系人监视器”和“报告的联系人”才能使其工作。

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.

  • body_shape_exited ( int body_id, Node body, int body_shape, int local_shape )

当一个体形与此体形接触时发出。必须启用“联系人监视器”和“报告的联系人”才能使其工作。

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 .

属性描述

违约

-1.0

设定器

设置角度阻尼(值)

吸气剂

得到角阻尼

阻尼刚体的旋转力。

违约

矢量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轴上的运动。

设定器

设置反弹(值)

吸气剂

获得反弹())

身体的弹性。值的范围从 0 (没有弹跳)到 1 (充满弹性)。

弃用,使用 PhysicsMaterial.bounce 而是通过 physics_material_override .

违约

设定器

设置可以睡眠(值)

吸气剂

你能入睡吗?

如果 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 函数(如果定义)。

设定器

设置摩擦(值)

吸气剂

得到摩擦

物体的摩擦力,从0(无摩擦)到1(最大摩擦力)。

弃用,使用 PhysicsMaterial.friction 而是通过 physics_material_override .

违约

1.0

设定器

设置重力标度(值)

吸气剂

得到重力标度

这将乘以中的全局三维重力设置 Project > Project Settings > Physics > 3d 产生刚体的重力。例如,值1为法向重力,2为双重力,0.5为半重力。

违约

-1.0

设定器

设置线性阻尼(值)

吸气剂

得到线性阻尼

身体的线性潮湿。不能小于-1.0。如果该值与-1.0不同,则从世界或区域派生的任何线性阻尼都将被覆盖。

违约

矢量3(0,0,0)

设定器

设置线性速度(值)

吸气剂

得到线性速度

物体的线速度。可以偶尔使用,但 不要每帧都设置这个 ,因为物理可以在另一个线程中运行,并以不同的粒度运行。使用 _integrate_forces 作为精确控制身体状态的过程循环。

违约

1.0

设定器

设置质量(值)

吸气剂

获取质量()

身体的质量。

违约

0

设定器

设置模式(值)

吸气剂

获取_模式()

身体模式。见 Mode 对于可能的值。

设定器

设置物理材料覆盖(值)

吸气剂

获取物理材料覆盖

违约

设定器

设置睡眠(值)

吸气剂

你在睡觉吗?

如果 true ,身体正在睡觉,直到被碰撞或 apply_impulse 方法。

违约

9.8

设定器

设置重量(值)

吸气剂

获得重量()

物体的重量基于其质量和全球三维重力。全局值设置在 Project > Project Settings > Physics > 3d .

方法说明

在物理处理期间调用,允许您读取并安全地修改对象的模拟状态。默认情况下,它除了正常的物理行为外还工作,但是 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 )

设置轴速度。给定矢量轴上的速度将设置为给定的矢量长度。这对跳跃行为很有用。