LookAtModifier3D
Наследует: SkeletonModifier3D < Node3D < Node < Object
LookAtModifier3D вращает кость, чтобы смотреть на цель.
Описание
Этот SkeletonModifier3D вращает кость, чтобы она смотрела на цель. Это полезно для вращения головы персонажа, чтобы он смотрел на игрока, вращения башни, чтобы она смотрела на цель, или в любом другом случае, когда вы хотите заставить кость вращаться в сторону чего-то быстро и легко.
При применении нескольких LookAtModifier3D, LookAtModifier3D назначенный родительской кости, должен быть помещен выше LookAtModifier3D, назначенного дочерней кости в списке, чтобы результаты дочерней кости были правильными.
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методы
get_interpolation_remaining() const |
|
is_interpolating() const |
|
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 с назначенной дочерней костью, визуализированный результат и направление не будут совпадать.
Описания свойств
Индекс bone_name в родительском Skeleton3D.
Имя кости Skeleton3D, с которой будет работать модификация.
Длительность интерполяции на основе времени. Интерполяция запускается в следующих случаях:
При изменении целевого узла
При перевороте оси из-за ограничения угла
Примечание: Переворот происходит, когда цель находится за пределами ограничения угла, а внутренне вычисленная вторичная ось вращения прямого вектора переворачивается. Визуально это происходит, когда цель находится за пределами ограничения угла и пересекает плоскость forward_axis и primary_rotation_axis.
Тип интерполяции на основе времени. См. также EaseType.
Передняя ось кости. Этот SkeletonModifier3D изменяет кость так, чтобы эта ось указывала на target_node.
Индекс origin_bone_name в родительском Skeleton3D.
Если origin_from равен ORIGIN_FROM_SPECIFIC_BONE, то в качестве начала координат используется указанное для него глобальное положение позы кости.
NodePath origin_external_node 🔗
Если origin_from равен ORIGIN_FROM_EXTERNAL_NODE, то в качестве начала координат используется указанная для него глобальная позиция Node3D.
OriginFrom origin_from = 0 🔗
void set_origin_from(value: OriginFrom)
OriginFrom get_origin_from()
Это значение определяет, из какого источника извлекается значение для использования при расчете прямого вектора.
Vector3 origin_offset = Vector3(0, 0, 0) 🔗
Смещение начала позы кости. Сопоставление начала по смещению полезно в случаях, когда несколько костей должны всегда смотреть в одном направлении, например, глаза.
Примечание: Это значение указывает локальное положение объекта, заданного в origin_from.
float origin_safe_margin = 0.1 🔗
Если цель движется слишком близко к началу координат, чем это значение, используется временная интерполяция, даже если цель находится в пределах угловых ограничений, чтобы не допустить слишком высокого значения угловой скорости.
float primary_damp_threshold 🔗
Порог для начала демпфирования для primary_limit_angle. Он обеспечивает нелинейную (b-сплайн) интерполяцию, позволяя ему чувствовать большее сопротивление, чем больше он вращается к пределу края. Это полезно для моделирования пределов человеческого движения.
Если 1.0, демпфирование не выполняется. Если 0.0, демпфирование выполняется всегда.
Предельный угол основного вращения, когда symmetry_limitation равно true, в радианах.
float primary_negative_damp_threshold 🔗
Пороговое значение для начала демпфирования для primary_negative_limit_angle.
float primary_negative_limit_angle 🔗
Предельный угол отрицательной стороны основного вращения, когда symmetry_limitation равно false, в радианах.
float primary_positive_damp_threshold 🔗
Пороговое значение для начала демпфирования для primary_positive_limit_angle.
float primary_positive_limit_angle 🔗
Предельный угол положительной стороны основного вращения, когда symmetry_limitation равно false, в радианах.
Axis primary_rotation_axis = 1 🔗
Ось первого вращения. Этот SkeletonModifier3D работает, компонуя вращение по углам Эйлера, чтобы предотвратить вращение forward_axis.
Относительная опция. Если true, вращение применяется относительно позы. Если false, вращение применяется относительно всего остального. Это означает замену текущей позы результатом LookAtModifier3D.
float secondary_damp_threshold 🔗
Пороговое значение для начала демпфирования 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 🔗
Предельный угол отрицательной стороны вторичного вращения, когда 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 🔗
Предельный угол положительной стороны вторичного вращения, когда symmetry_limitation равно false, в радианах.
Если true, ограничения распространяются от кости симметрично.
Если false, ограничение можно указать отдельно для каждой стороны костной опоры.
NodePath target_node = NodePath("") 🔗
NodePath к узлу, который является целью для модификации look at. Этот узел — то, к чему модификация будет поворачивать кость.
TransitionType transition_type = 0 🔗
void set_transition_type(value: TransitionType)
TransitionType get_transition_type()
Тип перехода временной интерполяции. См. также TransitionType.
bool use_angle_limitation = false 🔗
Если true, ограничивается величина вращения. Например, это помогает предотвратить вращение шеи персонажа на 360 градусов.
Примечание: Как и в случае смешивания AnimationTree, предоставляется интерполяция, которая отдаёт предпочтение Skeleton3D.get_bone_rest(). Это означает, что в некоторых случаях интерполяция не выбирает кратчайший путь.
Примечание: Некоторые значения transition_type (например, Tween.TRANS_BACK, Tween.TRANS_ELASTIC и Tween.TRANS_SPRING) могут превышать ограничения. Если интерполяция происходит с превышением ограничений, результат может не учитывать опору кости.
bool use_secondary_rotation = true 🔗
Если 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.