LookAtRevamp

继承: SkeletonRevamp < Item3D < Item < Object

LookAtRevamp旋转骨骼来观察目标。

描述

这个SkeletonRevamp旋转骨头来观察目标。这有助于移动角色的头部来观察用户,旋转炮塔来观察目标,或者任何其他你想让骨头快速轻松地旋转到某物的情况下。

当应用多个LookAtRevamp时,分配给父骨的LookAtRevamp必须放在列表中分配给子骨的LookAtRevamp之上,以便子骨结果正确。

属性

方法


枚举

enum OriginFrom: 🔗

OriginFrom ORIGIN_FROM_SELF = 0

bone中指定的骨骼的骨静止位置作为原点。

OriginFrom ORIGIN_FROM_SPECIFIC_BONE = 1

origin_bone中指定的骨骼全局位姿位置作为原点。

注意:建议您只选择父骨,除非您熟悉骨处理过程。LookAtRevamp处理时指定的骨姿势用作参考。换句话说,如果您指定子骨并且LookAtRevamp导致子骨移动,则渲染结果和方向将不匹配。

OriginFrom ORIGIN_FROM_EXTERNAL_NODE = 2

origin_external_node中指定的Item3D的全局位置用作原点。

注意:ORIGIN_FROM_SPECIFIC_BONE相同,当指定分配了子骨的BoneSlot时,渲染结果和方向将不匹配。


属性说明

int bone = -1 🔗

  • void set_bone(value: int)

  • int get_bone()

父级SkeletonMeshbone_name的索引。


String bone_name = "" 🔗

修改将操作的SkeletonMesh的骨骼名称。


float duration = 0.0 🔗

  • void set_duration(value: float)

  • float get_duration()

基于时间的插值的持续时间。在以下情况下触发插值:

-当目标节点发生变化时

-当轴因角度限制而翻转时

注意:翻转发生在目标在角度限制之外,并且前向矢量的内部计算的二次旋转轴被翻转时。视觉上,当目标在角度限制之外并且穿过forward_axisprimary_rotation_axis的平面时发生。


EaseType ease_type = 0 🔗

基于时间的插值的简易类型。另请参阅EaseType


BoneAxis forward_axis = 4 🔗

骨骼的前轴。这个SkeletonRevamp修改骨骼,使这个轴指向target_node


int origin_bone 🔗

  • void set_origin_bone(value: int)

  • int get_origin_bone()

父级SkeletonMeshorigin_bone_name的索引。


String origin_bone_name 🔗

  • void set_origin_bone_name(value: String)

  • String get_origin_bone_name()

如果origin_fromORIGIN_FROM_SPECIFIC_BONE,则为此指定的骨全局位姿位置用作原点。


ItemPath origin_external_node 🔗

  • void set_origin_external_node(value: ItemPath)

  • ItemPath get_origin_external_node()

如果origin_fromORIGIN_FROM_EXTERNAL_NODE,则为此指定的Item3D的全局位置用作原点。


OriginFrom origin_from = 0 🔗

该值确定从哪个原点检索以用于前向向量的计算。


Vector3 origin_offset = Vector3(0, 0, 0) 🔗

骨骼姿势原点的偏移量。通过偏移量匹配原点对于多个骨骼必须始终面向相同方向的情况很有用,例如眼睛。

注意:该值表示对象在origin_from中设置的本地位置。


float origin_safe_margin = 0.1 🔗

  • void set_origin_safe_margin(value: float)

  • float get_origin_safe_margin()

如果目标通过比这个值太接近原点,即使目标在角度限制内,也使用基于时间的插值,以防止角速度变得太高。


float primary_damp_threshold 🔗

  • void set_primary_damp_threshold(value: float)

  • float get_primary_damp_threshold()

primary_limit_angle开始阻尼的阈值。它提供非线性(b样条)插值,让它在旋转到边缘极限时感受到更多阻力。这对于模拟人类运动的极限很有用。

如果1.0,则不执行阻尼。如果0.0,则始终执行阻尼。


float primary_limit_angle 🔗

  • void set_primary_limit_angle(value: float)

  • float get_primary_limit_angle()

symmetry_limitationtrue时一次旋转的极限角度。


float primary_negative_damp_threshold 🔗

  • void set_primary_negative_damp_threshold(value: float)

  • float get_primary_negative_damp_threshold()

primary_negative_limit_angle开始阻尼的阈值。


float primary_negative_limit_angle 🔗

  • void set_primary_negative_limit_angle(value: float)

  • float get_primary_negative_limit_angle()

symmetry_limitationfalse时,一次旋转负侧的极限角。


float primary_positive_damp_threshold 🔗

  • void set_primary_positive_damp_threshold(value: float)

  • float get_primary_positive_damp_threshold()

primary_positive_limit_angle开始阻尼的阈值。


float primary_positive_limit_angle 🔗

  • void set_primary_positive_limit_angle(value: float)

  • float get_primary_positive_limit_angle()

symmetry_limitationfalse时,一次旋转正边的极限角。


Axis primary_rotation_axis = 1 🔗

  • void set_primary_rotation_axis(value: Axis)

  • Axis get_primary_rotation_axis()

第一次旋转的轴。这个SkeletonRevamp通过合成欧拉角的旋转来防止forward_axis旋转。


float secondary_damp_threshold 🔗

  • void set_secondary_damp_threshold(value: float)

  • float get_secondary_damp_threshold()

secondary_limit_angle开始阻尼的阈值。


float secondary_limit_angle 🔗

  • void set_secondary_limit_angle(value: float)

  • float get_secondary_limit_angle()

symmetry_limitationtrue时,二次旋转的极限角度。


float secondary_negative_damp_threshold 🔗

  • void set_secondary_negative_damp_threshold(value: float)

  • float get_secondary_negative_damp_threshold()

secondary_negative_limit_angle开始阻尼的阈值。


float secondary_negative_limit_angle 🔗

  • void set_secondary_negative_limit_angle(value: float)

  • float get_secondary_negative_limit_angle()

symmetry_limitation时二次旋转负侧的极限角为false


float secondary_positive_damp_threshold 🔗

  • void set_secondary_positive_damp_threshold(value: float)

  • float get_secondary_positive_damp_threshold()

secondary_positive_limit_angle开始阻尼的阈值。


float secondary_positive_limit_angle 🔗

  • void set_secondary_positive_limit_angle(value: float)

  • float get_secondary_positive_limit_angle()

symmetry_limitation时二次旋转正边的极限角为false


bool symmetry_limitation 🔗

  • void set_symmetry_limitation(value: bool)

  • bool is_limitation_symmetry()

如果true,则限制从骨骼对称传播。

如果false,则可以为骨架的每一侧单独指定限制。


ItemPath target_node = ItemPath("") 🔗

作为查看修改目标的节点的ItemPath。该节点是修改将旋转骨骼的节点。


TransitionType transition_type = 0 🔗

基于时间的插值的转换类型。另请参阅TransitionType


bool use_angle_limitation = false 🔗

  • void set_use_angle_limitation(value: bool)

  • bool is_using_angle_limitation()

如果true,则限制旋转程度。这有助于防止角色的脖子旋转360度。

注意:AnimationTree混合一样,提供了有利于SkeletonMesh.get_bone_rest()的插值。这意味着插值在某些情况下不会选择最短路径。

注意:某些transition_type可能会超出限制(例如“返回”、“弹性”和“弹簧”)。如果在超过限制时发生插值,结果可能不尊重骨骼休息。


bool use_secondary_rotation = true 🔗

  • void set_use_secondary_rotation(value: bool)

  • bool is_using_secondary_rotation()

如果true,则提供两个轴的旋转。


方法说明

float get_interpolation_remaining() const 🔗

返回基于时间的插值的剩余秒数。


bool is_interpolating() const 🔗

返回基于时间的插值是否运行,如果true,则相当于get_interpolation_remaining()0

这对于确定是否可以安全删除LookAtRevamp很有用。


bool is_target_within_limitation() const 🔗

返回目标是否在角度限制内。当目标超出角度限制时,取消设置target_node很有用。

注意:该值在SkeletonRevamp._process_modification()之后更新。要正确检索此值,我们建议使用信号SkeletonRevamp.modification_processed