LookAtModifier3D

Наследует: SkeletonModifier3D < Node3D < Node < Object

LookAtModifier3D вращает кость, чтобы смотреть на цель.

Описание

Этот SkeletonModifier3D вращает кость, чтобы она смотрела на цель. Это полезно для вращения головы персонажа, чтобы он смотрел на игрока, вращения башни, чтобы она смотрела на цель, или в любом другом случае, когда вы хотите заставить кость вращаться в сторону чего-то быстро и легко.

При применении нескольких LookAtModifier3D, LookAtModifier3D назначенный родительской кости, должен быть помещен выше LookAtModifier3D, назначенного дочерней кости в списке, чтобы результаты дочерней кости были правильными.

Свойства

int

bone

-1

String

bone_name

""

float

duration

0.0

EaseType

ease_type

0

BoneAxis

forward_axis

4

int

origin_bone

String

origin_bone_name

NodePath

origin_external_node

OriginFrom

origin_from

0

Vector3

origin_offset

Vector3(0, 0, 0)

float

origin_safe_margin

0.1

float

primary_damp_threshold

float

primary_limit_angle

float

primary_negative_damp_threshold

float

primary_negative_limit_angle

float

primary_positive_damp_threshold

float

primary_positive_limit_angle

Axis

primary_rotation_axis

1

bool

relative

true

float

secondary_damp_threshold

float

secondary_limit_angle

float

secondary_negative_damp_threshold

float

secondary_negative_limit_angle

float

secondary_positive_damp_threshold

float

secondary_positive_limit_angle

bool

symmetry_limitation

NodePath

target_node

NodePath("")

TransitionType

transition_type

0

bool

use_angle_limitation

false

bool

use_secondary_rotation

true

Методы

float

get_interpolation_remaining() const

bool

is_interpolating() const

bool

is_target_within_limitation() const


Перечисления

enum OriginFrom: 🔗

OriginFrom ORIGIN_FROM_SELF = 0

В качестве исходного положения используется положение покоя кости, указанное в bone.

OriginFrom ORIGIN_FROM_SPECIFIC_BONE = 1

Глобальная позиция позы кости, указанная в origin_bone, используется в качестве начала координат.

Примечание: Рекомендуется выбирать только родительскую кость, если вы не знакомы с процессом обработки костей. Указанная поза кости во время обработки LookAtModifier3D используется в качестве ссылки. Другими словами, если вы указываете дочернюю кость, а LookAtModifier3D заставляет дочернюю кость двигаться, визуализированный результат и направление не будут совпадать.

OriginFrom ORIGIN_FROM_EXTERNAL_NODE = 2

Глобальное положение Node3D, указанное в origin_external_node, используется в качестве начала координат.

Примечание: То же, что и ORIGIN_FROM_SPECIFIC_BONE, при указании BoneAttachment3D с назначенной дочерней костью, визуализированный результат и направление не будут совпадать.


Описания свойств

int bone = -1 🔗

  • void set_bone(value: int)

  • int get_bone()

Индекс bone_name в родительском Skeleton3D.


String bone_name = "" 🔗

Имя кости Skeleton3D, с которой будет работать модификация.


float duration = 0.0 🔗

  • void set_duration(value: float)

  • float get_duration()

Длительность интерполяции на основе времени. Интерполяция запускается в следующих случаях:

  • При изменении целевого узла

  • При перевороте оси из-за ограничения угла

Примечание: Переворот происходит, когда цель находится за пределами ограничения угла, а внутренне вычисленная вторичная ось вращения прямого вектора переворачивается. Визуально это происходит, когда цель находится за пределами ограничения угла и пересекает плоскость forward_axis и primary_rotation_axis.


EaseType ease_type = 0 🔗

Тип интерполяции на основе времени. См. также EaseType.


BoneAxis forward_axis = 4 🔗

Передняя ось кости. Этот SkeletonModifier3D изменяет кость так, чтобы эта ось указывала на target_node.


int origin_bone 🔗

  • void set_origin_bone(value: int)

  • int get_origin_bone()

Индекс origin_bone_name в родительском Skeleton3D.


String origin_bone_name 🔗

  • void set_origin_bone_name(value: String)

  • String get_origin_bone_name()

Если origin_from равен ORIGIN_FROM_SPECIFIC_BONE, то в качестве начала координат используется указанное для него глобальное положение позы кости.


NodePath origin_external_node 🔗

  • void set_origin_external_node(value: NodePath)

  • NodePath get_origin_external_node()

Если origin_from равен ORIGIN_FROM_EXTERNAL_NODE, то в качестве начала координат используется указанная для него глобальная позиция Node3D.


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_limitation равно true, в радианах.


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_limitation равно false, в радианах.


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_limitation равно false, в радианах.


Axis primary_rotation_axis = 1 🔗

  • void set_primary_rotation_axis(value: Axis)

  • Axis get_primary_rotation_axis()

Ось первого вращения. Этот SkeletonModifier3D работает, компонуя вращение по углам Эйлера, чтобы предотвратить вращение forward_axis.


bool relative = true 🔗

  • void set_relative(value: bool)

  • bool is_relative()

Относительная опция. Если true, вращение применяется относительно позы. Если false, вращение применяется относительно всего остального. Это означает замену текущей позы результатом LookAtModifier3D.


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_limitation равно true, в радианах.


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, ограничение можно указать отдельно для каждой стороны костной опоры.


NodePath target_node = NodePath("") 🔗

NodePath к узлу, который является целью для модификации look at. Этот узел — то, к чему модификация будет поворачивать кость.


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, предоставляется интерполяция, которая отдаёт предпочтение Skeleton3D.get_bone_rest(). Это означает, что в некоторых случаях интерполяция не выбирает кратчайший путь.

Примечание: Некоторые значения transition_type (например, Tween.TRANS_BACK, Tween.TRANS_ELASTIC и Tween.TRANS_SPRING) могут превышать ограничения. Если интерполяция происходит с превышением ограничений, результат может не учитывать опору кости.


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, если выполняется интерполяция на основе времени. Если true, это эквивалентно get_interpolation_remaining(), возвращающему 0.0.

Это полезно для определения того, можно ли безопасно удалить LookAtModifier3D.


bool is_target_within_limitation() const 🔗

Возвращает, находится ли цель в пределах ограничений угла. Это полезно для отмены установки target_node, когда цель находится вне ограничений угла.

Примечание: Значение обновляется после SkeletonModifier3D._process_modification(). Для корректного получения этого значения мы рекомендуем использовать сигнал SkeletonModifier3D.modification_processed.