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)

Свойства

float

interpolation

Vector3

magnet

Vector3(0, 0, 0)

int

max_iterations

10

float

min_distance

0.01

bool

override_tip_basis

true

StringName

root_bone

&""

Transform3D

target

Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)

NodePath

target_node

NodePath("")

StringName

tip_bone

&""

bool

use_magnet

false

Методы

Skeleton3D

get_parent_skeleton() const

bool

is_running()

void

start(one_time: bool = false)

void

stop()


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

float interpolation 🔗

  • void set_interpolation(value: float)

  • float get_interpolation()

Устарело: Use SkeletonModifier3D.influence instead.

Значение интерполяции для того, насколько результаты IK применяются к текущей цепочке костей скелета. Значение 1.0 полностью перезапишет все преобразования костей скелета, а значение 0.0 визуально отключит SkeletonIK.


Vector3 magnet = Vector3(0, 0, 0) 🔗

  • void set_magnet_position(value: Vector3)

  • Vector3 get_magnet_position()

Вторичное целевое положение (первое — свойство target или target_node) для цепи IK. Используйте положение магнита (целевой полюс) для управления изгибом цепи IK. Работает только в том случае, если в цепочке костей больше 2 костей. Положение кости средней цепи будет линейно интерполировано с положением магнита.


int max_iterations = 10 🔗

  • void set_max_iterations(value: int)

  • int get_max_iterations()

Количество итерационных циклов, используемых решателем IK для получения более точных (и элегантных) результатов костной цепи.


float min_distance = 0.01 🔗

  • void set_min_distance(value: float)

  • float get_min_distance()

Минимальное расстояние между костью и целью. Если расстояние меньше этого значения, решатель IK останавливает дальнейшие итерации.


bool override_tip_basis = true 🔗

  • void set_override_tip_basis(value: bool)

  • bool is_override_tip_basis()

Если true, то вращение кончика кости перезаписывается вращением target (или target_node, если определено).


StringName root_bone = &"" 🔗

Название текущей корневой кости, первой кости в цепочке IK.


Transform3D target = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗

Первая цель цепи IK, где размещается кончик кости, и, если override_tip_basis равно true, как поворачивается кончик кости. Если доступен путь target_node, то вместо этого используется преобразование узлов, а это свойство игнорируется.


NodePath target_node = NodePath("") 🔗

Целевой узел NodePath для цепочки IK. Если доступно, вместо свойства target используется текущий Transform3D узла.


StringName tip_bone = &"" 🔗

Имя текущей конечной кости, последней кости в цепочке IK, размещенной в преобразовании target (или target_node, если оно определено).


bool use_magnet = false 🔗

  • void set_use_magnet(value: bool)

  • bool is_using_magnet()

Если true, то указывает решателю IK учитывать вторичную цель магнита (цель полюса) при расчете костной цепи. Используйте положение магнита (цель полюса) для управления изгибом цепи IK.


Описания метода

Skeleton3D get_parent_skeleton() const 🔗

Возвращает родительский узел Skeleton3D, который присутствовал, когда SkeletonIK вошел в дерево сцены. Возвращает null, если родительский узел не был узлом Skeleton3D, когда SkeletonIK3D вошел в дерево сцены.


bool is_running() 🔗

Возвращает 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() для удаления существующих переопределений для всех костей.