Skeleton3D

Наследует: Node3D < Node < Object

Узел, содержащий иерархию костей, используемый для создания трехмерной скелетной анимации.

Описание

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) 🔗

Выдается, когда кость в 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() 🔗

Выдается при обновлении rest данных.


show_rest_only_changed() 🔗

Вызывается при изменении значения show_rest_only.


skeleton_updated() 🔗

Выдается, когда рассчитана окончательная поза, будет применена к skin'у в процессе обновления.

Это означает, что вся обработка SkeletonModifier3D завершена. Чтобы обнаружить завершение обработки каждого SkeletonModifier3D, используйте SkeletonModifier3D.modification_processed.


Перечисления

enum ModifierCallbackModeProcess: 🔗

ModifierCallbackModeProcess MODIFIER_CALLBACK_MODE_PROCESS_PHYSICS = 0

Установите флаг для обработки изменений во время физических кадров (см. Node.NOTIFICATION_INTERNAL_PHYSICS_PROCESS).

ModifierCallbackModeProcess MODIFIER_CALLBACK_MODE_PROCESS_IDLE = 1

Установите флаг для модификации процесса во время кадров процесса (см. 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 для совместимости. Это свойство управляет внутренним виртуальным PhysicalBoneSimulator3D SkeletonModifier3D.active.


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 🔗

Возвращает глобальное преобразование rest для bone_idx.


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

Returns the metadata with the given key for the bone at index bone_idx.


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, то у кости нет родителя.

Примечание: Возвращаемая родительская кость всегда будет меньше, чем bone_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 🔗

Возвращает масштаб позы кости в bone_idx.


Transform3D get_bone_rest(bone_idx: int) const 🔗

Возвращает rest преобразование для кости bone_idx.


StringName get_concatenated_bone_names() const 🔗

Возвращает все имена костей, объединенные запятыми (,) как один StringName.

Полезно задать его как подсказку для свойства enum.


PackedInt32Array get_parentless_bones() const 🔗

Возвращает массив со всеми костями, которые не имеют родителей. Другой способ взглянуть на это — это то, что он возвращает индексы всех костей, которые не зависят или не изменяются другими костями в Скелете.


int get_version() const 🔗

Возвращает количество раз, когда иерархия костей изменялась в этом скелете, включая переименования.

Версия скелета не сериализуется: используется только в одном экземпляре Skeleton3D.

Используется для аннулирования кэшей в IK и других узлах, которые обрабатывают кости.


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

Returns true if the bone at index bone_idx has metadata with the given key.


bool is_bone_enabled(bone_idx: int) const 🔗

Возвращает, включена ли поза кости для кости в bone_idx.


void localize_rests() 🔗

Возвращает все кости скелета в исходное (rest) положение.


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) 🔗

Привязывает указанный 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) 🔗

Sets the metadata with the given key to value for the bone at index bone_idx.


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 — это Quaternion, описывающий вращение в локальном координатном пространстве кости относительно вращения любых родительских костей.


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

Устанавливает масштаб позы кости в bone_idx на scale.


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

Устанавливает rest преобразование для кости bone_idx.


void unparent_bone_and_rest(bone_idx: int) 🔗

Делает кость bone_idx без родительской, и устанавливает ее положение покоя в положение родительской кости перед сбросом.