SkeletonIK3D

Застаріло: This class may be changed or removed in future versions.

Успадковує: SkeletonModifier3D < Node3D < Node < Object

Вузол використовується для обертання всіх кісток Skeleton3D кісткового ланцюжка, що розміщує кінцеву кістку на бажаному положенні 3D.

Опис

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
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)
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 візуально відключить скелети.


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. При наявності поточного вузла Transform3D використовується замість об'єкта target.


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() для видалення наявних накладок на всіх кістках.