Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

SpringBoneSimulator3D

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

SkeletonModifier3D для застосування інерційного коливання до кісткових ланцюгів.

Опис

Цей SkeletonModifier3D можна використовувати для імітації коливання волосся, одягу та хвостів. Цей модифікатор працює інакше, ніж PhysicalBoneSimulator3D, оскільки він намагається повернути вихідну позу після модифікації.

Якщо ви налаштуєте set_root_bone() та set_end_bone(), це розглядається як один ланцюг кісток. Зверніть увагу, що він не підтримує розгалужені ланцюги, такі як Y-подібні ланцюги.

Коли створюється ланцюг кісток, з кісток, що існують між ними та перелічені у списку суглобів, генерується масив.

До кожного з'єднання можна застосувати кілька властивостей, таких як set_joint_stiffness(), set_joint_drag() та set_joint_gravity().

Для спрощення ви можете встановити значення для всіх з'єднань одночасно, використовуючи Curve. Якщо ви хочете вказати детальні значення індивідуально, встановіть set_individual_config() на true.

Для фізичного моделювання SpringBoneSimulator3D може мати дочірні елементи як самостійні зіткнення, що не пов'язані з PhysicsServer3D, див. також SpringBoneCollision3D.

Попередження: Масштабований SpringBoneSimulator3D, ймовірно, не буде поводитися як очікується. Переконайтеся, що батьківський Skeleton3D та його кістки не масштабовані.

Примітка: Більшість методів у цьому класі приймають параметр index. Цей параметр визначає, який запис зі списку налаштувань повернути, якщо IK має кілька записів (наприклад, settings/<index>/root_bone_name).

Властивості

Vector3

external_force

Vector3(0, 0, 0)

bool

mutable_bone_axes

true

int

setting_count

0

Методи

bool

are_all_child_collisions_enabled(index: int) const

void

clear_collisions(index: int)

void

clear_exclude_collisions(index: int)

void

clear_settings()

int

get_center_bone(index: int) const

String

get_center_bone_name(index: int) const

CenterFrom

get_center_from(index: int) const

NodePath

get_center_node(index: int) const

int

get_collision_count(index: int) const

NodePath

get_collision_path(index: int, collision: int) const

float

get_drag(index: int) const

Curve

get_drag_damping_curve(index: int) const

int

get_end_bone(index: int) const

BoneDirection

get_end_bone_direction(index: int) const

float

get_end_bone_length(index: int) const

String

get_end_bone_name(index: int) const

int

get_exclude_collision_count(index: int) const

NodePath

get_exclude_collision_path(index: int, collision: int) const

float

get_gravity(index: int) const

Curve

get_gravity_damping_curve(index: int) const

Vector3

get_gravity_direction(index: int) const

int

get_joint_bone(index: int, joint: int) const

String

get_joint_bone_name(index: int, joint: int) const

int

get_joint_count(index: int) const

float

get_joint_drag(index: int, joint: int) const

float

get_joint_gravity(index: int, joint: int) const

Vector3

get_joint_gravity_direction(index: int, joint: int) const

float

get_joint_radius(index: int, joint: int) const

RotationAxis

get_joint_rotation_axis(index: int, joint: int) const

Vector3

get_joint_rotation_axis_vector(index: int, joint: int) const

float

get_joint_stiffness(index: int, joint: int) const

float

get_radius(index: int) const

Curve

get_radius_damping_curve(index: int) const

int

get_root_bone(index: int) const

String

get_root_bone_name(index: int) const

RotationAxis

get_rotation_axis(index: int) const

Vector3

get_rotation_axis_vector(index: int) const

float

get_stiffness(index: int) const

Curve

get_stiffness_damping_curve(index: int) const

bool

is_config_individual(index: int) const

bool

is_end_bone_extended(index: int) const

void

reset()

void

set_center_bone(index: int, bone: int)

void

set_center_bone_name(index: int, bone_name: String)

void

set_center_from(index: int, center_from: CenterFrom)

void

set_center_node(index: int, node_path: NodePath)

void

set_collision_count(index: int, count: int)

void

set_collision_path(index: int, collision: int, node_path: NodePath)

void

set_drag(index: int, drag: float)

void

set_drag_damping_curve(index: int, curve: Curve)

void

set_enable_all_child_collisions(index: int, enabled: bool)

void

set_end_bone(index: int, bone: int)

void

set_end_bone_direction(index: int, bone_direction: BoneDirection)

void

set_end_bone_length(index: int, length: float)

void

set_end_bone_name(index: int, bone_name: String)

void

set_exclude_collision_count(index: int, count: int)

void

set_exclude_collision_path(index: int, collision: int, node_path: NodePath)

void

set_extend_end_bone(index: int, enabled: bool)

void

set_gravity(index: int, gravity: float)

void

set_gravity_damping_curve(index: int, curve: Curve)

void

set_gravity_direction(index: int, gravity_direction: Vector3)

void

set_individual_config(index: int, enabled: bool)

void

set_joint_drag(index: int, joint: int, drag: float)

void

set_joint_gravity(index: int, joint: int, gravity: float)

void

set_joint_gravity_direction(index: int, joint: int, gravity_direction: Vector3)

void

set_joint_radius(index: int, joint: int, radius: float)

void

set_joint_rotation_axis(index: int, joint: int, axis: RotationAxis)

void

set_joint_rotation_axis_vector(index: int, joint: int, vector: Vector3)

void

set_joint_stiffness(index: int, joint: int, stiffness: float)

void

set_radius(index: int, radius: float)

void

set_radius_damping_curve(index: int, curve: Curve)

void

set_root_bone(index: int, bone: int)

void

set_root_bone_name(index: int, bone_name: String)

void

set_rotation_axis(index: int, axis: RotationAxis)

void

set_rotation_axis_vector(index: int, vector: Vector3)

void

set_stiffness(index: int, stiffness: float)

void

set_stiffness_damping_curve(index: int, curve: Curve)


Переліки

enum CenterFrom: 🔗

CenterFrom CENTER_FROM_WORLD_ORIGIN = 0

Початок світу визначається як центр.

CenterFrom CENTER_FROM_NODE = 1

Node3D, визначений set_center_node(), визначається як центр.

Якщо Node3D не знайдено, батьківський Skeleton3D розглядається як центр.

CenterFrom CENTER_FROM_BONE = 2

Позиція кістки батьківського елемента Skeleton3D, визначена set_center_bone(), визначається як центр.

Якщо Node3D не знайдено, батьківський Skeleton3D розглядається як центр.


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

Vector3 external_force = Vector3(0, 0, 0) 🔗

  • void set_external_force(value: Vector3)

  • Vector3 get_external_force()

Постійна сила, яка завжди впливала на кістки. Вона дорівнює результату, коли батьківський об'єкт Skeleton3D рухається з цією швидкістю в протилежному напрямку.

Це корисно для таких ефектів, як вітер та антигравітація.


bool mutable_bone_axes = true 🔗

  • void set_mutable_bone_axes(value: bool)

  • bool are_bone_axes_mutable()

Якщо true, розв'язувач отримує вісь кістки з пози кістки кожного кадру.

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


int setting_count = 0 🔗

  • void set_setting_count(value: int)

  • int get_setting_count()

Кількість налаштувань.


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

bool are_all_child_collisions_enabled(index: int) const 🔗

Повертає true, якщо всі дочірні SpringBoneCollision3D містяться у списку колізій за адресою index у налаштуваннях.


void clear_collisions(index: int) 🔗

Очищає всі колізії зі списку колізій у index у налаштуваннях, якщо are_all_child_collisions_enabled() має значення false.


void clear_exclude_collisions(index: int) 🔗

Очищає всі виключені зіткнення зі списку зіткнень у index у налаштуваннях, якщо are_all_child_collisions_enabled() має значення true.


void clear_settings() 🔗

Очищає всі налаштування.


int get_center_bone(index: int) const 🔗

Повертає індекс центральної кістки ланцюга кісток.


String get_center_bone_name(index: int) const 🔗

Повертає назву центральної кістки ланцюга кісток.


CenterFrom get_center_from(index: int) const 🔗

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


NodePath get_center_node(index: int) const 🔗

Повертає шлях центрального вузла кісткового ланцюга.


int get_collision_count(index: int) const 🔗

Повертає кількість зіткнень у списку зіткнень ланцюга кісток, якщо are_all_child_collisions_enabled() має значення false.


NodePath get_collision_path(index: int, collision: int) const 🔗

Повертає шлях до вузла SpringBoneCollision3D у collision у списку зіткнень ланцюжка кісток, коли are_all_child_collisions_enabled() має значення false.


float get_drag(index: int) const 🔗

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


Curve get_drag_damping_curve(index: int) const 🔗

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


int get_end_bone(index: int) const 🔗

Повертає індекс кінцевої кістки ланцюга кісток.


BoneDirection get_end_bone_direction(index: int) const 🔗

Повертає напрямок хвоста кінцевої кістки ланцюжка кісток, коли is_end_bone_extended() має значення true.


float get_end_bone_length(index: int) const 🔗

Повертає довжину кінця кісткового ланцюжка, коли is_end_bone_extended() має значення true.


String get_end_bone_name(index: int) const 🔗

Повертає назву кінцевої кістки ланцюжка кісток.


int get_exclude_collision_count(index: int) const 🔗

Повертає кількість виключених зіткнень зі списку виключених зіткнень ланцюга кісток, якщо are_all_child_collisions_enabled() має значення true.


NodePath get_exclude_collision_path(index: int, collision: int) const 🔗

Повертає шлях до вузла SpringBoneCollision3D у collision у списку виключених зіткнень ланцюжка кісток, коли are_all_child_collisions_enabled() має значення true.


float get_gravity(index: int) const 🔗

Повертає силу тяжіння ланцюга кісток.


Curve get_gravity_damping_curve(index: int) const 🔗

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


Vector3 get_gravity_direction(index: int) const 🔗

Повертає напрямок сили тяжіння кісткового ланцюга.


int get_joint_bone(index: int, joint: int) const 🔗

Повертає індекс кістки в joint у списку суглобів кісткового ланцюга.


String get_joint_bone_name(index: int, joint: int) const 🔗

Повертає назву кістки в joint у списку суглобів ланцюга кісток.


int get_joint_count(index: int) const 🔗

Повертає кількість з’єднань у списку з’єднань кісткового ланцюга.


float get_joint_drag(index: int, joint: int) const 🔗

Повертає силу опору в joint у списку суглобів кісткового ланцюга.


float get_joint_gravity(index: int, joint: int) const 🔗

Повертає силу тяжіння в joint у списку суглобів кісткового ланцюга.


Vector3 get_joint_gravity_direction(index: int, joint: int) const 🔗

Повертає напрямок сили тяжіння в joint у списку суглобів кісткового ланцюга.


float get_joint_radius(index: int, joint: int) const 🔗

Повертає радіус у joint у списку суглобів кісткового ланцюга.


RotationAxis get_joint_rotation_axis(index: int, joint: int) const 🔗

Повертає вісь обертання в joint у списку суглобів кісткового ланцюга.


Vector3 get_joint_rotation_axis_vector(index: int, joint: int) const 🔗

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

Якщо get_joint_rotation_axis() має значення SkeletonModifier3D.ROTATION_AXIS_ALL, цей метод повертає Vector3(0, 0, 0).


float get_joint_stiffness(index: int, joint: int) const 🔗

Повертає силу жорсткості в joint у списку суглобів кісткового ланцюга.


float get_radius(index: int) const 🔗

Повертає радіус суглоба кісткового ланцюга.


Curve get_radius_damping_curve(index: int) const 🔗

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


int get_root_bone(index: int) const 🔗

Повертає індекс кореневої кістки ланцюга кісток.


String get_root_bone_name(index: int) const 🔗

Повертає назву кореневої кістки ланцюга кісток.


RotationAxis get_rotation_axis(index: int) const 🔗

Повертає вісь обертання кісткового ланцюга.


Vector3 get_rotation_axis_vector(index: int) const 🔗

Повертає вектор осі обертання кісткового ланцюга. Цей вектор представляє вісь, навколо якої може обертатися кістковий ланцюг. Він визначається на основі осі обертання, встановленої для кісткового ланцюга.

Якщо get_rotation_axis() має значення SkeletonModifier3D.ROTATION_AXIS_ALL, цей метод повертає Vector3(0, 0, 0).


float get_stiffness(index: int) const 🔗

Повертає силу жорсткості кісткового ланцюга.


Curve get_stiffness_damping_curve(index: int) const 🔗

Повертає криву амортизації сили жорсткості кісткового ланцюга.


bool is_config_individual(index: int) const 🔗

Повертає true, якщо конфігурацію можна редагувати окремо для кожного з’єднання.


bool is_end_bone_extended(index: int) const 🔗

Повертає true, якщо кінцева кістка подовжена, щоб мати хвіст.


void reset() 🔗

Скидає стан імітації щодо поточної пози кістки.

Це корисно, щоб запобігти насильницькому результату моделювання. Наприклад, виклик цього одразу після виклику AnimationPlayer.play() без затухання або в межах попереднього сигналу SkeletonModifier3D.modification_processed, якщо його умови суттєво змінюються.


void set_center_bone(index: int, bone: int) 🔗

Встановлює індекс центральної кістки кісткового ланцюга.


void set_center_bone_name(index: int, bone_name: String) 🔗

Встановлює назву центральної кістки ланцюга кісток.


void set_center_from(index: int, center_from: CenterFrom) 🔗

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

Рух кістки обчислюється на основі різниці у відносній відстані між центром і кісткою в попередньому та наступному кадрах.

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

У цьому випадку рухом кістки вважається лише зміна пози кістки.


void set_center_node(index: int, node_path: NodePath) 🔗

Встановлює шлях центрального вузла кісткового ланцюга.


void set_collision_count(index: int, count: int) 🔗

Встановлює кількість зіткнень у списку зіткнень у index у налаштуваннях, коли are_all_child_collisions_enabled() має значення false.


void set_collision_path(index: int, collision: int, node_path: NodePath) 🔗

Встановлює шлях до вузла SpringBoneCollision3D у collision у списку зіткнень ланцюга кісток, коли are_all_child_collisions_enabled() має значення false.


void set_drag(index: int, drag: float) 🔗

Встановлює силу опору кісткового ланцюга. Чим більше значення, тим більше пригнічується ворушіння.

Значення масштабується за допомогою set_drag_damping_curve() і кешується в кожному параметрі з’єднання в списку з’єднань.


void set_drag_damping_curve(index: int, curve: Curve) 🔗

Встановлює криву амортизації сили опору кісткового ланцюга.


void set_enable_all_child_collisions(index: int, enabled: bool) 🔗

Якщо enabled має значення true, усі дочірні SpringBoneCollision3D конфліктують, а метод set_exclude_collision_path() увімкнено як список виключень за адресою index у налаштуваннях.

Якщо enabled має значення false, вам потрібно вручну зареєструвати всі дійсні колізії за допомогою методу set_collision_path().


void set_end_bone(index: int, bone: int) 🔗

Встановлює кінцевий кістковий індекс кісткового ланцюга.


void set_end_bone_direction(index: int, bone_direction: BoneDirection) 🔗

Встановлює напрямок кінцевої кістки ланцюжка кісток, якщо is_end_bone_extended() має значення true.


void set_end_bone_length(index: int, length: float) 🔗

Встановлює довжину хвоста кінцевої кістки ланцюжка кісток, якщо is_end_bone_extended() має значення true.


void set_end_bone_name(index: int, bone_name: String) 🔗

Встановлює назву кінцевої кістки ланцюга кісток.

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


void set_exclude_collision_count(index: int, count: int) 🔗

Встановлює кількість колізій виключення в списку колізій виключення в index у налаштуваннях, коли are_all_child_collisions_enabled() має значення true.


void set_exclude_collision_path(index: int, collision: int, node_path: NodePath) 🔗

Встановлює шлях вузла SpringBoneCollision3D за значенням collision у списку виключення колізій ланцюжка кісток, коли are_all_child_collisions_enabled() має значення true.


void set_extend_end_bone(index: int, enabled: bool) 🔗

Якщо enabled має значення true, кінцева кістка подовжується, щоб мати хвіст.

Конфігурація розширеного хвоста призначається останньому елементу у списку суглобів. Іншими словами, якщо встановити enabled на false, конфігурація останнього елемента у списку суглобів не впливає на результат моделювання.


void set_gravity(index: int, gravity: float) 🔗

Встановлює ступінь сили тяжіння кісткового ланцюга. Це значення не є прискоренням, а постійною швидкістю руху в set_gravity_direction().

Якщо gravity не 0, змінена поза не повернеться до початкової пози, оскільки на неї завжди впливає гравітація.

Значення масштабується set_gravity_damping_curve() і кешується в налаштуваннях кожного з’єднання в списку з’єднань.


void set_gravity_damping_curve(index: int, curve: Curve) 🔗

Встановлює криву демпфування сили тяжіння кісткового ланцюга.


void set_gravity_direction(index: int, gravity_direction: Vector3) 🔗

Встановлює напрямок сили тяжіння кісткового ланцюга. Це значення внутрішньо нормалізується, а потім множиться на set_gravity().

Значення зберігається в кеш-пам’яті в кожному параметрі об’єднання в списку об’єднань.


void set_individual_config(index: int, enabled: bool) 🔗

Якщо enabled має значення true, конфігурацію можна редагувати окремо для кожного з’єднання.


void set_joint_drag(index: int, joint: int, drag: float) 🔗

Встановлює силу опору для joint у списку суглобів кісткового ланцюга, якщо is_config_individual() має значення true.


void set_joint_gravity(index: int, joint: int, gravity: float) 🔗

Встановлює силу тяжіння в joint у списку суглобів кісткового ланцюга, якщо is_config_individual() має значення true.


void set_joint_gravity_direction(index: int, joint: int, gravity_direction: Vector3) 🔗

Встановлює напрямок сили тяжіння для joint у списку суглобів кісткового ланцюга, якщо is_config_individual() має значення true.


void set_joint_radius(index: int, joint: int, radius: float) 🔗

Встановлює радіус суглоба на joint у списку суглобів кісткового ланцюга, якщо is_config_individual() має значення true.


void set_joint_rotation_axis(index: int, joint: int, axis: RotationAxis) 🔗

Встановлює вісь обертання в joint у списку суглобів ланцюжка кісток, якщо is_config_individual() має значення true.

Осі базуються на просторі еталонної пози; якщо axis має значення SkeletonModifier3D.ROTATION_AXIS_CUSTOM, ви можете вказати будь-яку вісь.

Тут опорною позою є поза кісток безпосередньо перед симуляцією.

Примітка: Вісь обертання та вектор руху вперед не повинні бути колінеарними, щоб уникнути небажаного обертання, оскільки SpringBoneSimulator3D не враховує сили скручування.


void set_joint_rotation_axis_vector(index: int, joint: int, vector: Vector3) 🔗

Встановлює вектор осі обертання для зазначеного суглоба в ланцюжку кісток.

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

Якщо довжина вектора дорівнює 0, він вважається синонімом SkeletonModifier3D.ROTATION_AXIS_ALL.


void set_joint_stiffness(index: int, joint: int, stiffness: float) 🔗

Встановлює силу жорсткості для joint у списку суглобів кісткового ланцюга, якщо is_config_individual() має значення true.


void set_radius(index: int, radius: float) 🔗

Встановлює радіус суглоба кісткового ланцюга. Він використовується для переміщення та ковзання за допомогою SpringBoneCollision3D у списку зіткнень.

Значення масштабується set_radius_damping_curve() і кешується в кожному параметрі з’єднання в списку з’єднань.


void set_radius_damping_curve(index: int, curve: Curve) 🔗

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


void set_root_bone(index: int, bone: int) 🔗

Встановлює індекс кореневої кістки кісткового ланцюга.


void set_root_bone_name(index: int, bone_name: String) 🔗

Встановлює назву кореневої кістки ланцюга кісток.


void set_rotation_axis(index: int, axis: RotationAxis) 🔗

Встановлює вісь обертання ланцюжка кісток. Якщо вказано конкретну вісь, вона діє як шарнірний суглоб. Значення зберігається у кеші для кожного суглоба у списку суглобів.

Осі базуються на просторі еталонної пози; якщо axis має значення SkeletonModifier3D.ROTATION_AXIS_CUSTOM, ви можете вказати будь-яку вісь.

Тут опорною позою є поза кісток безпосередньо перед симуляцією.

Примітка: Вектор осі обертання та вектор руху вперед не повинні бути колінеарними, щоб уникнути небажаного обертання, оскільки SpringBoneSimulator3D не враховує сили скручування.


void set_rotation_axis_vector(index: int, vector: Vector3) 🔗

Встановлює вектор осі обертання ланцюга кісток. Значення кешується в кожному налаштуванні суглоба у списку суглобів.

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

Якщо довжина вектора дорівнює 0, він вважається синонімом SkeletonModifier3D.ROTATION_AXIS_ALL.


void set_stiffness(index: int, stiffness: float) 🔗

Встановлює силу жорсткості кісткового ланцюга. Чим більше значення, тим швидше він повертається до початкового положення.

Якщо stiffness дорівнює 0, змінена поза не повернеться до початкової пози.

Значення масштабується set_stiffness_damping_curve() і кешується в налаштуваннях кожного з’єднання в списку з’єднань.


void set_stiffness_damping_curve(index: int, curve: Curve) 🔗

Встановлює криву амортизації сили жорсткості кісткового ланцюга.