PhysicalBone3D
继承: PhysicsBody3D < CollisionObject3D < Node3D < Node < Object
用于让 Skeleton3D 中的骨骼对物理作出反应的物理体。
描述
PhysicalBone3D 节点是一个物理体,可用于使 Skeleton3D 中的骨骼对物理做出反应。
注意:为了通过射线投射检测物理骨骼,父级 PhysicalBoneSimulator3D 的 SkeletonModifier3D.active 属性必须为 true,并且 Skeleton3D 的骨骼必须正确分配给 PhysicalBone3D;这意味着 get_bone_id() 应该返回一个有效的 id(>= 0)。
教程
属性
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
方法
void |
_integrate_forces(state: PhysicsDirectBodyState3D) virtual |
void |
apply_central_impulse(impulse: Vector3) |
void |
apply_impulse(impulse: Vector3, position: Vector3 = Vector3(0, 0, 0)) |
get_bone_id() const |
|
枚举
enum DampMode: 🔗
DampMode DAMP_MODE_COMBINE = 0
在这种模式下,物体的阻尼值将被加到区域中设置的任何值或默认值。
DampMode DAMP_MODE_REPLACE = 1
在这种模式下,物体的阻尼值将替换掉区域中设置的任何值或默认值。
enum JointType: 🔗
JointType JOINT_TYPE_NONE = 0
PhysicsBone3D 未应用任何关节。
JointType JOINT_TYPE_PIN = 1
PhysicsBone3D 应用了钉固关节。
JointType JOINT_TYPE_CONE = 2
PhysicsBone3D 应用了锥形关节。
JointType JOINT_TYPE_HINGE = 3
PhysicsBone3D 应用了铰链关节。
JointType JOINT_TYPE_SLIDER = 4
PhysicsBone3D 应用了滑杆关节。
JointType JOINT_TYPE_6DOF = 5
PhysicsBone3D 应用了六自由度关节。
属性说明
阻碍物体的旋转。默认情况下,物体将使用项目设置 ProjectSettings.physics/3d/default_angular_damp,或物体所在的 Area3D 中设置的任何覆盖值。取决于 angular_damp_mode,可以设置 angular_damp 以增加或替换物体的阻尼值。
有关阻尼的更多详细信息,请参阅 ProjectSettings.physics/3d/default_angular_damp。
DampMode angular_damp_mode = 0 🔗
定义如何应用 angular_damp。
Vector3 angular_velocity = Vector3(0, 0, 0) 🔗
该 PhysicalBone3D 的旋转速度,以每秒弧度为单位。
Transform3D body_offset = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗
void set_body_offset(value: Transform3D)
Transform3D get_body_offset()
设置该物体的变换。
身体的反弹力。值范围从 0 (无反弹)到 1(完全反弹)。
注意:即使将 bounce 设置为 1.0,由于线性和角度阻尼,一些能量也会随着时间的推移而损失。要让 PhysicalBone3D 随时间推移保留其所有能量,请将 bounce 设置为 1.0、linear_damp_mode 设置为 DAMP_MODE_REPLACE、linear_damp 设置为 0.0、angular_damp_mode 设置为 DAMP_MODE_REPLACE、并将 angular_damp 设置为 0.0。
如果为 true,则会在不移动时停用该物体,所以它在被外力唤醒前不会参与模拟。
bool custom_integrator = false 🔗
如果为 true,则该物体的标准力积分(如重力或阻尼)将被禁用。除了碰撞响应之外,如果覆盖了 _integrate_forces() 方法,则物体将仅按照该方法确定的方式移动。
设置该属性将在内部调用方法 PhysicsServer3D.body_set_omit_force_integration()。
该物体的摩擦,从 0(无摩擦)到 1(最大摩擦)。
与 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) 🔗
void set_joint_offset(value: Transform3D)
Transform3D get_joint_offset()
设置该关节的变换。
Vector3 joint_rotation = Vector3(0, 0, 0) 🔗
设置该关节的旋转,单位为弧度。
设置关节类型。
阻碍物体的运动。默认情况下,物体将使用 ProjectSettings.physics/3d/default_linear_damp,或物体所在的 Area3D 中设置的任何覆盖值。取决于 linear_damp_mode,可以设置 linear_damp 以增加或替换物体的阻尼值。
有关阻尼的更多详细信息,请参阅 ProjectSettings.physics/3d/default_linear_damp。
DampMode linear_damp_mode = 0 🔗
定义如何应用 linear_damp。
Vector3 linear_velocity = Vector3(0, 0, 0) 🔗
物体的线速度,单位为单位每秒。可以偶尔使用,但是不要每一帧都设置它,因为物理可能在另一个线程中运行,并且以不同的间隔。使用 _integrate_forces() 作为你的进程循环,以精确控制物体状态。
实体的质量。
方法说明
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)) 🔗
施加不影响旋转的定位冲量。
冲量与时间无关!每帧都应用冲量会产生依赖于帧率的力。因此只应该用于模拟一次性冲击(否则请使用“_integrate_forces”函数)。
等价于在物体的质心处使用 apply_impulse()。
返回 PhysicsBone3D 的唯一标识符。
如果 PhysicsBone3D 允许进行物理模拟,则返回 true。
bool is_simulating_physics() 🔗
如果 PhysicsBone3D 正在进行物理模拟,则返回 true。