PhysicalBone

继承: PhysicsBulkBase < ColliderObjectBase < Item3D < Item < Object

一个用来制造骨骼的物理体对物理做出反应。

描述

PhysicalBone节点是一个物理体,可用于使SkeletonMesh中的骨骼对物理做出反应。

注意:为了使用光线投射检测物理骨骼,父PhysicalBoneSimuSkeletonRevamp.active属性必须为true,并且SkeletonMesh的骨骼必须正确分配给PhysicalBone;这意味着get_bone_id()应该返回一个有效的id(>=0)。

属性

float

angular_damp

0.0

DampMode

angular_damp_mode

0

Vector3

angular_velocity

Vector3(0, 0, 0)

Transform3D

body_offset

Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)

float

bounce

0.0

bool

can_sleep

true

bool

custom_integrator

false

float

friction

1.0

float

gravity_scale

1.0

Transform3D

joint_offset

Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)

Vector3

joint_rotation

Vector3(0, 0, 0)

JointType

joint_type

0

float

linear_damp

0.0

DampMode

linear_damp_mode

0

Vector3

linear_velocity

Vector3(0, 0, 0)

float

mass

1.0

方法

void

_integrate_forces(state: PhysicsDirectBodyState3D) virtual

void

apply_central_impulse(impulse: Vector3)

void

apply_impulse(impulse: Vector3, position: Vector3 = Vector3(0, 0, 0))

int

get_bone_id() const

bool

get_simulate_physics()

bool

is_simulating_physics()


枚举

enum DampMode: 🔗

DampMode DAMP_MODE_COMBINE = 0

在这种模式下,身体的阻尼值被添加到区域中设置的任何值或默认值。

DampMode DAMP_MODE_REPLACE = 1

在此模式下,机身的阻尼值将替换区域中设置的任何值或默认值。


enum JointType: 🔗

JointType JOINT_TYPE_NONE = 0

没有联合应用于物理Bone3D。

JointType JOINT_TYPE_PIN = 1

引脚接头应用于物理Bone3D。

JointType JOINT_TYPE_CONE = 2

锥形接头应用于物理Bone3D。

JointType JOINT_TYPE_HINGE = 3

铰链接头应用于物理骨3D。

JointType JOINT_TYPE_SLIDER = 4

将滑块接头应用于物理Bone3D。

JointType JOINT_TYPE_6DOF = 5

一个6自由度的关节应用于物理骨3D。


属性说明

float angular_damp = 0.0 🔗

  • void set_angular_damp(value: float)

  • float get_angular_damp()

阻尼身体的旋转。默认情况下,身体将使用ProjectSettings.physics/3d/default_angular_damp项目设置或身体所在的AreaTrigger设置的任何值覆盖。根据angular_damp_mode,您可以设置angular_damp以添加或替换身体的阻尼值。

有关阻尼的更多详细信息,请参见ProjectSettings.physics/3d/default_angular_damp


DampMode angular_damp_mode = 0 🔗

定义如何应用angular_damp。有关可能的值,请参阅DampMode


Vector3 angular_velocity = Vector3(0, 0, 0) 🔗

  • void set_angular_velocity(value: Vector3)

  • Vector3 get_angular_velocity()

以每秒弧度为单位的物理骨3D旋转速度。


Transform3D body_offset = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗

设置身体的变换。


float bounce = 0.0 🔗

  • void set_bounce(value: float)

  • float get_bounce()

身体的弹性。值的范围从0(无反弹)到1(完全弹性)。

注意:即使将bounce设置为1.0,也会由于线性和角度阻尼而随着时间的推移损失一些能量。要使PhysicalBone随着时间的推移保留所有能量,请将bounce设置为1.0linear_damp_mode设置为DAMP_MODE_REPLACElinear_damp设置为0.0angular_damp_mode设置为DAMP_MODE_REPLACE,以及angular_damp设置为0.0


bool can_sleep = true 🔗

  • void set_can_sleep(value: bool)

  • bool is_able_to_sleep()

如果true,则身体在没有运动时停用,因此在被外力唤醒之前不会参加模拟。


bool custom_integrator = false 🔗

  • void set_use_custom_integrator(value: bool)

  • bool is_using_custom_integrator()

如果true,则该物体的标准力积分(如重力或阻尼)将被禁用。除了碰撞响应,如果该虚拟方法被覆盖,则该物体将仅根据_integrate_forces()方法确定的方式移动。

设置此属性将在内部调用方法PhysicsServer3D.body_set_omit_force_integration()


float friction = 1.0 🔗

  • void set_friction(value: float)

  • float get_friction()

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


float gravity_scale = 1.0 🔗

  • void set_gravity_scale(value: float)

  • float get_gravity_scale()

这乘以ProjectSettings.physics/3d/default_gravity来产生这个物体的重力。例如,1.0的值将应用正常重力,2.0将应用两倍的重力,0.5将应用一半的重力。


Transform3D joint_offset = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗

设置关节的变换。


Vector3 joint_rotation = Vector3(0, 0, 0) 🔗

  • void set_joint_rotation(value: Vector3)

  • Vector3 get_joint_rotation()

设置关节的弧度旋转。


JointType joint_type = 0 🔗

设置关节类型。有关可能的值,请参阅JointType


float linear_damp = 0.0 🔗

  • void set_linear_damp(value: float)

  • float get_linear_damp()

阻尼身体的运动。默认情况下,身体将使用ProjectSettings.physics/3d/default_linear_damp或身体所在的AreaTrigger设置的任何值覆盖。根据linear_damp_modelinear_damp可以添加或替换身体的阻尼值。

有关阻尼的更多详细信息,请参见ProjectSettings.physics/3d/default_linear_damp


DampMode linear_damp_mode = 0 🔗

定义如何应用linear_damp。有关可能的值,请参阅DampMode


Vector3 linear_velocity = Vector3(0, 0, 0) 🔗

  • void set_linear_velocity(value: Vector3)

  • Vector3 get_linear_velocity()

以每秒为单位的身体线速度。可以零星使用,但是不要每帧都设置这个,因为物理学可能在另一个线程中运行,并且以不同的颗粒度运行。使用_integrate_forces()作为您的过程循环,以精确控制身体状态。


float mass = 1.0 🔗

身体的质量。


方法说明

void _integrate_forces(state: PhysicsDirectBodyState3D) virtual 🔗

在物理处理期间调用,允许您读取并安全地修改对象的模拟状态。默认情况下,它在标准力集成之前调用,但custom_integrator属性允许您禁用标准力集成并为主体进行完全自定义的力集成。


void apply_central_impulse(impulse: Vector3) 🔗

在不影响旋转的情况下应用方向脉冲。

脉冲是与时间无关的!每帧应用一个脉冲将导致帧速率相关的力。因此,它应该只在模拟一次性撞击时使用(否则使用“_integrate_forces”功能)。

这相当于在身体质心处使用apply_impulse()


void apply_impulse(impulse: Vector3, position: Vector3 = Vector3(0, 0, 0)) 🔗

将定位脉冲应用于物理Bone3D。

脉冲是与时间无关的!每帧应用一个脉冲将导致帧速率相关的力。因此,它应该只在模拟一次性撞击时使用(否则使用“_integrate_forces”功能)。

position是全局坐标系中物理骨原点的偏移量。


int get_bone_id() const 🔗

返回TonicsBone3D的唯一标识符。


bool get_simulate_physics() 🔗

如果允许MediicsBone3D模拟物理,则返回true


bool is_simulating_physics() 🔗

(C++11起)返回true如果物理Bone3D当前正在模拟物理。