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 и его кости не масштабированы.
Свойства
|
||
|
Методы
Перечисления
enum BoneDirection: 🔗
BoneDirection BONE_DIRECTION_PLUS_X = 0
Перечисленное значение для оси +X.
BoneDirection BONE_DIRECTION_MINUS_X = 1
Перечисленное значение для оси -X.
BoneDirection BONE_DIRECTION_PLUS_Y = 2
Перечисленное значение для оси +Y.
BoneDirection BONE_DIRECTION_MINUS_Y = 3
Перечисленное значение для оси -Y.
BoneDirection BONE_DIRECTION_PLUS_Z = 4
Перечисленное значение для оси +Z.
BoneDirection BONE_DIRECTION_MINUS_Z = 5
Перечисленное значение для оси -Z.
BoneDirection BONE_DIRECTION_FROM_PARENT = 6
Перечисленное значение для оси от родительской кости до дочерней кости.
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 рассматривается как центр.
enum RotationAxis: 🔗
RotationAxis ROTATION_AXIS_X = 0
Перечисленное значение для вращения оси X.
RotationAxis ROTATION_AXIS_Y = 1
Перечисленное значение для вращения оси Y.
RotationAxis ROTATION_AXIS_Z = 2
Перечисленное значение для вращения оси Z.
RotationAxis ROTATION_AXIS_ALL = 3
Перечисленное значение для неограниченного вращения.
RotationAxis ROTATION_AXIS_CUSTOM = 4
Перечисленное значение для необязательной оси вращения. См. также set_joint_rotation_axis_vector().
Описания свойств
Vector3 external_force = Vector3(0, 0, 0) 🔗
Постоянная сила, которая всегда воздействует на кости. Она равна результату, когда родитель Skeleton3D движется с этой скоростью в противоположном направлении.
Это полезно для таких эффектов, как ветер и антигравитация.
Количество настроек.
Описания метода
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() равен 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() равен 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.
Оси основаны на пространстве Skeleton3D.get_bone_rest(), если axis равен ROTATION_AXIS_CUSTOM, вы можете указать любую ось.
Примечание: Ось вращения и прямой вектор не должны быть коллинеарными, чтобы избежать непреднамеренного вращения, поскольку SpringBoneSimulator3D не учитывает скручивающие силы.
void set_joint_rotation_axis_vector(index: int, joint: int, vector: Vector3) 🔗
Задает вектор оси вращения для указанного сустава в костной цепи.
Этот вектор нормализуется внутренним процессом и представляет собой ось, вокруг которой может вращаться костная цепь.
Если длина вектора равна 0, он считается синонимом 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) 🔗
Устанавливает ось вращения цепи костей. Если задана конкретная ось, она действует как шарнирное сочленение. Значение кэшируется в каждой настройке сочленения в списке сочленений.
Оси основаны на пространстве Skeleton3D.get_bone_rest(), если axis — это ROTATION_AXIS_CUSTOM, вы можете указать любую ось.
Примечание: Вектор оси вращения и прямой вектор не должны быть коллинеарными, чтобы избежать непреднамеренного вращения, поскольку SpringBoneSimulator3D не учитывает скручивающие силы.
void set_rotation_axis_vector(index: int, vector: Vector3) 🔗
Задает вектор оси вращения цепи костей. Значение кэшируется в каждой настройке сустава в списке суставов.
Этот вектор нормализуется внутренним процессом и представляет собой ось, вокруг которой может вращаться цепь костей.
Если длина вектора равна 0, он считается синонимом 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) 🔗
Устанавливает кривую демпфирования силы жесткости костной цепи.