Skeleton3D

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

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

Опис

Skeleton3D надає інтерфейс для управління ієрархією кісток, включаючи позу, відпочинок та анімацію (див. Animation). Також можна використовувати ragdoll фізики.

Загальна трансформація кістки по відношенню до скелета визначається кістковою позою. Біонний відпочинок визначає початкову трансформацію кісткової пози.

Зверніть увагу, що «глобальна поза» нижче відноситься до загального перетворення кістки по відношенню до скелета, тому не є фактичним глобальним / світовим перетворенням кістки.

Посібники

Властивості

bool

animate_physical_bones

true

ModifierCallbackModeProcess

modifier_callback_mode_process

1

float

motion_scale

1.0

bool

show_rest_only

false

Методи

int

add_bone(name: String)

void

advance(delta: float)

void

clear_bones()

void

clear_bones_global_pose_override()

Skin

create_skin_from_rest_transforms()

int

find_bone(name: String) const

void

force_update_all_bone_transforms()

void

force_update_bone_child_transform(bone_idx: int)

PackedInt32Array

get_bone_children(bone_idx: int) const

int

get_bone_count() const

Transform3D

get_bone_global_pose(bone_idx: int) const

Transform3D

get_bone_global_pose_no_override(bone_idx: int) const

Transform3D

get_bone_global_pose_override(bone_idx: int) const

Transform3D

get_bone_global_rest(bone_idx: int) const

Variant

get_bone_meta(bone_idx: int, key: StringName) const

Array[StringName]

get_bone_meta_list(bone_idx: int) const

String

get_bone_name(bone_idx: int) const

int

get_bone_parent(bone_idx: int) const

Transform3D

get_bone_pose(bone_idx: int) const

Vector3

get_bone_pose_position(bone_idx: int) const

Quaternion

get_bone_pose_rotation(bone_idx: int) const

Vector3

get_bone_pose_scale(bone_idx: int) const

Transform3D

get_bone_rest(bone_idx: int) const

StringName

get_concatenated_bone_names() const

PackedInt32Array

get_parentless_bones() const

int

get_version() const

bool

has_bone_meta(bone_idx: int, key: StringName) const

bool

is_bone_enabled(bone_idx: int) const

void

localize_rests()

void

physical_bones_add_collision_exception(exception: RID)

void

physical_bones_remove_collision_exception(exception: RID)

void

physical_bones_start_simulation(bones: Array[StringName] = [])

void

physical_bones_stop_simulation()

SkinReference

register_skin(skin: Skin)

void

reset_bone_pose(bone_idx: int)

void

reset_bone_poses()

void

set_bone_enabled(bone_idx: int, enabled: bool = true)

void

set_bone_global_pose(bone_idx: int, pose: Transform3D)

void

set_bone_global_pose_override(bone_idx: int, pose: Transform3D, amount: float, persistent: bool = false)

void

set_bone_meta(bone_idx: int, key: StringName, value: Variant)

void

set_bone_name(bone_idx: int, name: String)

void

set_bone_parent(bone_idx: int, parent_idx: int)

void

set_bone_pose(bone_idx: int, pose: Transform3D)

void

set_bone_pose_position(bone_idx: int, position: Vector3)

void

set_bone_pose_rotation(bone_idx: int, rotation: Quaternion)

void

set_bone_pose_scale(bone_idx: int, scale: Vector3)

void

set_bone_rest(bone_idx: int, rest: Transform3D)

void

unparent_bone_and_rest(bone_idx: int)


Сигнали

bone_enabled_changed(bone_idx: int) 🔗

Викликається, коли кістка за параметром param bone_idx() перемикається за допомогою методу set_bone_enabled(). Використовуйте метод is_bone_enabled() для перевірки нового значення.


bone_list_changed() 🔗

Викликається, коли список кісток змінюється, наприклад, під час виклику методу add_bone(), методу set_bone_parent(), unparent_bone_and_rest() або методу clear_bones().


pose_updated() 🔗

Увімкнено, коли поз оновлено.

Примітка: Під час процесу оновлення цей сигнал не пожежний, тому модифікація SkeletonModifier3D не виявлена.


rest_updated() 🔗

Видається, коли решта оновлюється.


show_rest_only_changed() 🔗

Викликається, коли змінюється значення show_rest_only.


skeleton_updated() 🔗

Випробувано, коли остаточна поза була розрахована на шкіру в процесі оновлення.

Це означає, що всі SkeletonModifier3D обробка завершено. Для виявлення завершення обробки кожного SkeletonModifier3D використовуйте SkeletonModifier3D.modification_processed.


Переліки

enum ModifierCallbackModeProcess: 🔗

ModifierCallbackModeProcess MODIFIER_CALLBACK_MODE_PROCESS_PHYSICS = 0

Встановити прапор для модифікації процесу при фізичних кадрах (див. [constant Node.NOTIFICATION_INTERNAL_PHYSICS_PROCESS".

ModifierCallbackModeProcess MODIFIER_CALLBACK_MODE_PROCESS_IDLE = 1

Встановити прапор для модифікації процесу під час обробки кадрів (див. [constant Node.NOTIFICATION_INTERNAL_PROCESS".

ModifierCallbackModeProcess MODIFIER_CALLBACK_MODE_PROCESS_MANUAL = 2

Не обробляйте модифікацію. Використовуйте advance() для обробки модифікації вручну.


Константи

NOTIFICATION_UPDATE_SKELETON = 50 🔗

Після того, як цей скелет буде оновлено. У тому випадку, це називається тільки один раз за кадром в розшифрованому процесі.


Описи властивостей

bool animate_physical_bones = true 🔗

  • void set_animate_physical_bones(value: bool)

  • bool get_animate_physical_bones()

Застаріло: Ця властивість може бути змінена або усунута у наступних версіях.

Якщо ви дотримуєтеся рекомендованого робочого процесу та явно маєте PhysicalBoneSimulator3D як дочірній об'єкт Skeleton3D, ви можете контролювати, чи впливає на нього raycasting, не запускаючи метод physical_bones_start_simulation(), за допомогою його SkeletonModifier3D.active.

Однак, для старих (застарілих) конфігурацій Skeleton3D має внутрішній віртуальний PhysicalBoneSimulator3D для сумісності. Ця властивість контролює внутрішній віртуальний SkeletonModifier3D.active PhysicalBoneSimulator3D.


ModifierCallbackModeProcess modifier_callback_mode_process = 1 🔗

Встановлює терміни обробки для модифікатора.


float motion_scale = 1.0 🔗

  • void set_motion_scale(value: float)

  • float get_motion_scale()

Мультиплікація 3D позиційної анімації.

Примітка: Без цього значення 1.0, ключове значення в анімації не буде відповідати дійсному значення позиції.


bool show_rest_only = false 🔗

  • void set_show_rest_only(value: bool)

  • bool is_show_rest_only()

Якщо true, змусить кісточки в їх за замовчуванням решта, незалежно від їх значень. У редакторі це також запобігає редагуванню кісток.


Описи методів

int add_bone(name: String) 🔗

Додає нову кісточку з вказаною назвою. Повертає новий індекс кістки, або -1, якщо цей метод не виходить.

Примітка: Біони повинні бути унікальними, не порожніми, і не можна включати : і `` /`` символи.


void advance(delta: float) 🔗

Вручну просунути дочірні об'єкти SkeletonModifier3D на заданий час (у секундах).

Примітка: Значення delta тимчасово накопичується в Skeleton3D, і відкладений процес використовує накопичене значення для обробки модифікації.


void clear_bones() 🔗

Очистити всі кістки в цьому скелеті.


void clear_bones_global_pose_override() 🔗

Застаріло: Цей метод може бути змінений або усунутий у наступних версіях.

Видаліть глобальну позу на всіх кістках у скелеті.


Skin create_skin_from_rest_transforms() 🔗

There is currently no description for this method. Please help us by contributing one!


int find_bone(name: String) const 🔗

Повертає кістковий індекс, який відповідає name як його ім'я. Повертає -1, якщо немає кістки з такою назвою.


void force_update_all_bone_transforms() 🔗

Застаріло: This method should only be called internally.

Примус оновлює кісткові трансформатори / пози для всіх кісток в скелеті.


void force_update_bone_child_transform(bone_idx: int) 🔗

Примушує кісткову трансформацію на кістці bone_idx і всі її діти.


PackedInt32Array get_bone_children(bone_idx: int) const 🔗

Повертає масив, що містить кісткові індекси всіх дочірньих вузлів пропущених в кістці, bone_idx.


int get_bone_count() const 🔗

Повертає кількість кісток в скелеті.


Transform3D get_bone_global_pose(bone_idx: int) const 🔗

Повертає загальне перетворення зазначеної кістки, по відношенню до скелета. Що стосується каркаса скелета, то це не фактичне «глобальне» перетворення кістки.

Примітка: Це глобальна поза, яку ви встановили до скелету в процесі, кінцева глобальна поза може передаватися модифікаторами в процесі відстрочення, якщо ви хочете отримати доступ до кінцевої глобальної пози, скористайтеся SkeletonModifier3D.modification_processed.


Transform3D get_bone_global_pose_no_override(bone_idx: int) const 🔗

Застаріло: Цей метод може бути змінений або усунутий у наступних версіях.

Повертає загальне перетворення зазначеної кістки, по відношенню до скелета, але без перепадів глобальної пози. Що стосується каркаса скелета, то це не фактичне «глобальне» перетворення кістки.


Transform3D get_bone_global_pose_override(bone_idx: int) const 🔗

Застаріло: Цей метод може бути змінений або усунутий у наступних версіях.

Повернути глобальну позу перевизначну трансформацію для bone_idx.


Transform3D get_bone_global_rest(bone_idx: int) const 🔗

Повертає глобальну трансформацію відпочинку для bone_idx.


Variant get_bone_meta(bone_idx: int, key: StringName) const 🔗

Повертає метадані для кістки за індексом bone_idx з key.


Array[StringName] get_bone_meta_list(bone_idx: int) const 🔗

Повертає список усіх ключів метаданих для кістки за індексом bone_idx.


String get_bone_name(bone_idx: int) const 🔗

Повертає назву кісточки в індексі bone_idx.


int get_bone_parent(bone_idx: int) const 🔗

Повертає кістковий індекс, який є батьком кісточки bone_idx. Якщо -1, то кістка не має батьків.

Примітка: Повернути батьківську кісточку завжди буде менше параметр кістка_idx.


Transform3D get_bone_pose(bone_idx: int) const 🔗

Повертає позу трансформацію зазначеної кістки.

Примітка: Це поза, яку ви встановили до скелета в процесі, кінцева поза може отримати перерозподілений модифікаторами в процесі відстрочення, якщо ви хочете отримати доступ до кінцевої пози, скористайтеся SkeletonModifier3D.modification_processed.


Vector3 get_bone_pose_position(bone_idx: int) const 🔗

Повертає положення кістки в точці bone_idx. Повернений Vector3 знаходиться в локальному координатному просторі вузла Skeleton3D.


Quaternion get_bone_pose_rotation(bone_idx: int) const 🔗

Повертаємо позу обертання кісточки на bone_idx. Повернуто Quaternion локально до кістки щодо обертання будь-яких кісток батьків.


Vector3 get_bone_pose_scale(bone_idx: int) const 🔗

Повертаємо шкалу пози кісточки на парова кістка_idx.


Transform3D get_bone_rest(bone_idx: int) const 🔗

Повертає решту перетворення кістки bone_idx.


StringName get_concatenated_bone_names() const 🔗

Повертає всі кісткові імена, що містять коми (,) як єдиний StringName.

Корисно встановити її як підказка на об'єкт нерухомості.


PackedInt32Array get_parentless_bones() const 🔗

Повертає масив з усіма кісточками, які без батьків. Ще один спосіб подивитися на це те, що він повертає індекси всіх кісток, які не залежні або модифіковані іншими кісточками в скелеті.


int get_version() const 🔗

Повертає кількість разів, коли кісткова ієрархія змінилася в межах цього скелета, в тому числі перейменувань.

Версія Skeleton не є послідовним: використовувати лише в одному екземплярі Skeleton3D.

Використовуйте для недійсних кешів у розчинників IK та інших вузлів, які обробляють кістки.


bool has_bone_meta(bone_idx: int, key: StringName) const 🔗

Повертає true, якщо кістка за індексом bone_idx має метадані з ключем key.


bool is_bone_enabled(bone_idx: int) const 🔗

Повертає, чи ввімкнено кісткову позу для кістки bone_idx.


void localize_rests() 🔗

Повертає всі кістки в скелеті до їхнього відпочинку пози.


void physical_bones_add_collision_exception(exception: RID) 🔗

Застаріло: Цей метод може бути змінений або усунутий у наступних версіях.

Додає виключення зіткнення до фізичної кістки.

Працює так само, як вузол RigidBody3D.


void physical_bones_remove_collision_exception(exception: RID) 🔗

Застаріло: Цей метод може бути змінений або усунутий у наступних версіях.

Вилучає виключення зіткнення до фізичної кістки.

Працює так само, як вузол RigidBody3D.


void physical_bones_start_simulation(bones: Array[StringName] = []) 🔗

Застаріло: Цей метод може бути змінений або усунутий у наступних версіях.

Повідомляє вершини PhysicalBone3D у Скелеті, щоб розпочати імітацію та реагацію на фізичний світ.

Додатково можна пропустити список кісткових імен, що дозволяє імітувати тільки пропущені кістки.


void physical_bones_stop_simulation() 🔗

Застаріло: Цей метод може бути змінений або усунутий у наступних версіях.

Розмістіть вузол PhysicalBone3D у Скелеті, щоб зупинити імітацію.


SkinReference register_skin(skin: Skin) 🔗

Побої заданої шкіри до скелета.


void reset_bone_pose(bone_idx: int) 🔗

Налаштовує кісткову позу для відпочинку bone_idx.


void reset_bone_poses() 🔗

Встановлює всі кісткові пози для відпочинку.


void set_bone_enabled(bone_idx: int, enabled: bool = true) 🔗

Вимкнено позу для кістки на bone_idx, якщо false, дозволяє кісткову позу, якщо true.


void set_bone_global_pose(bone_idx: int, pose: Transform3D) 🔗

Встановлює глобальне перетворення пози, pose, для кістки за адресою bone_idx.

Примітка: Якщо пози інших кісток були змінені, цей метод виконує некоректне перерахунок поз і призведе до погіршення продуктивності. Якщо ви знаєте, що буде застосовано кілька глобальних поз, розгляньте можливість використання set_bone_pose() з попереднім обчисленням.


void set_bone_global_pose_override(bone_idx: int, pose: Transform3D, amount: float, persistent: bool = false) 🔗

Застаріло: Цей метод може бути змінений або усунутий у наступних версіях.

Встановлює глобальне перетворення пози, pose, для кістки за адресою bone_idx.

amount – це сила інтерполяції, яка буде використовуватися під час застосування пози, а persistent визначає, чи залишиться застосована поза.

Примітка: Перетворення пози має бути глобальною позою! Щоб перетворити перетворення світу з Node3D на глобальну позу кістки, помножте Transform3D.affine_inverse() вузла Node3D.global_transform на потрібне перетворення світу.


void set_bone_meta(bone_idx: int, key: StringName, value: Variant) 🔗

Встановлює метадані для кістки за індексом bone_idx, встановлюючи key мета до value.


void set_bone_name(bone_idx: int, name: String) 🔗

Встановлює назву кістки, name, для кістки за адресою bone_idx.


void set_bone_parent(bone_idx: int, parent_idx: int) 🔗

Встановлює індекс кістки parent_idx як батьківський елемент для кістки за адресою bone_idx. Якщо -1, то кістка не має батьківського елемента.

Примітка: parent_idx має бути меншим за bone_idx.


void set_bone_pose(bone_idx: int, pose: Transform3D) 🔗

Встановлює перетворення пози pose для кістки за адресою bone_idx.


void set_bone_pose_position(bone_idx: int, position: Vector3) 🔗

Встановлює позицію кістки в bone_idx на position. position – це Vector3, що описує позицію, локальну для вузла Skeleton3D.


void set_bone_pose_rotation(bone_idx: int, rotation: Quaternion) 🔗

Встановлює обертання кістки в bone_idx на rotation. rotation – це кватерніон, що описує обертання в локальному координатному просторі кістки відносно обертання будь-яких батьківських кісток.


void set_bone_pose_scale(bone_idx: int, scale: Vector3) 🔗

Встановлює масштаб пози кістки в bone_idx на scale.


void set_bone_rest(bone_idx: int, rest: Transform3D) 🔗

Налаштовує решту перетворень для кістки bone_idx.


void unparent_bone_and_rest(bone_idx: int) 🔗

Непристойна кісточка на bone_idx і встановлює її решту позицію до того, що його батько перед скиданням.