SkeletonIK3D
Устарело: This class may be changed or removed in future versions.
Наследует: SkeletonModifier3D < Node3D < Node < Object
Узел, используемый для поворота всех костей цепочки костей Skeleton3D таким образом, чтобы разместить конечную кость в желаемом трехмерном положении.
Описание
SkeletonIK3D используется для вращения всех костей цепочки костей Skeleton3D таким образом, чтобы поместить конечную кость в желаемое положение в 3D. Типичный сценарий для IK в играх — поместить ноги персонажа на землю или руки персонажа на удерживаемый в данный момент объект. SkeletonIK использует FabrikInverseKinematic внутренне для решения цепочки костей и применяет результаты к свойству Skeleton3D bones_global_pose_override для всех затронутых костей в цепочке. При полном применении это перезаписывает любое преобразование костей из Animation или пользовательских поз костей, установленных пользователями. Применяемое количество можно контролировать с помощью свойства SkeletonModifier3D.influence.
# Автоматически применять эффект IK к каждому новому кадру (не к текущему)
skeleton_ik_node.start()
# Применить эффект IK только к текущему кадру
skeleton_ik_node.start(true)
# Остановить эффект IK и сбросить bones_global_pose_override на скелете
skeleton_ik_node.stop()
# Применить полный эффект IK
skeleton_ik_node.set_influence(1.0)
# Применить половины эффекта IK
skeleton_ik_node.set_influence(0.5)
# Применить нулевой эффект IK (значение 0,01 или ниже также удаляет bones_global_pose_override для скелета)
skeleton_ik_node.set_influence(0.0)
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методы
get_parent_skeleton() const |
|
void |
|
void |
stop() |
Описания свойств
Устарело: Use SkeletonModifier3D.influence instead.
Значение интерполяции для того, насколько результаты IK применяются к текущей цепочке костей скелета. Значение 1.0 полностью перезапишет все преобразования костей скелета, а значение 0.0 визуально отключит SkeletonIK.
Vector3 magnet = Vector3(0, 0, 0) 🔗
Вторичное целевое положение (первое — свойство target или target_node) для цепи IK. Используйте положение магнита (целевой полюс) для управления изгибом цепи IK. Работает только в том случае, если в цепочке костей больше 2 костей. Положение кости средней цепи будет линейно интерполировано с положением магнита.
Количество итерационных циклов, используемых решателем IK для получения более точных (и элегантных) результатов костной цепи.
Минимальное расстояние между костью и целью. Если расстояние меньше этого значения, решатель IK останавливает дальнейшие итерации.
bool override_tip_basis = true 🔗
Если true, то вращение кончика кости перезаписывается вращением target (или target_node, если определено).
StringName root_bone = &"" 🔗
void set_root_bone(value: StringName)
StringName get_root_bone()
Название текущей корневой кости, первой кости в цепочке IK.
Transform3D target = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗
void set_target_transform(value: Transform3D)
Transform3D get_target_transform()
Первая цель цепи IK, где размещается кончик кости, и, если override_tip_basis равно true, как поворачивается кончик кости. Если доступен путь target_node, то вместо этого используется преобразование узлов, а это свойство игнорируется.
NodePath target_node = NodePath("") 🔗
Целевой узел NodePath для цепочки IK. Если доступно, вместо свойства target используется текущий Transform3D узла.
StringName tip_bone = &"" 🔗
void set_tip_bone(value: StringName)
StringName get_tip_bone()
Имя текущей конечной кости, последней кости в цепочке IK, размещенной в преобразовании target (или target_node, если оно определено).
Если true, то указывает решателю IK учитывать вторичную цель магнита (цель полюса) при расчете костной цепи. Используйте положение магнита (цель полюса) для управления изгибом цепи IK.
Описания метода
Skeleton3D get_parent_skeleton() const 🔗
Возвращает родительский узел Skeleton3D, который присутствовал, когда SkeletonIK вошел в дерево сцены. Возвращает null, если родительский узел не был узлом Skeleton3D, когда SkeletonIK3D вошел в дерево сцены.
Возвращает true, если SkeletonIK применяет эффекты IK на продолжающихся кадрах к костям Skeleton3D. Возвращает false, если SkeletonIK остановлен или start() был использован с параметром one_time, установленным на true.
void start(one_time: bool = false) 🔗
Начинает применять эффекты IK в каждом кадре к костям Skeleton3D, но вступит в силу только со следующего кадра. Если one_time равен true, это вступит в силу немедленно, но также сбросится в следующем кадре.
void stop() 🔗
Прекращает применение эффектов IK в каждом кадре к костям Skeleton3D, а также вызывает Skeleton3D.clear_bones_global_pose_override() для удаления существующих переопределений для всех костей.