PhysicsBody3D

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

Наследуется от: CharacterBody3D, PhysicalBone3D, RigidBody3D, StaticBody3D

Абстрактный базовый класс для игровых 3D-объектов, на которые влияет физика.

Описание

PhysicsBody3D — абстрактный базовый класс для 3D-объектов игры, на которые влияет физика. Все 3D-физические тела наследуются от него.

Предупреждение: При неравномерном масштабе этот узел, скорее всего, будет вести себя не так, как ожидалось. Рекомендуется сохранять его масштаб одинаковым по всем осям и вместо этого корректировать его форму(ы) столкновения.

Обучающие материалы

Свойства

bool

axis_lock_angular_x

false

bool

axis_lock_angular_y

false

bool

axis_lock_angular_z

false

bool

axis_lock_linear_x

false

bool

axis_lock_linear_y

false

bool

axis_lock_linear_z

false

Методы

void

add_collision_exception_with(body: Node)

bool

get_axis_lock(axis: BodyAxis) const

Array[PhysicsBody3D]

get_collision_exceptions()

Vector3

get_gravity() const

KinematicCollision3D

move_and_collide(motion: Vector3, test_only: bool = false, safe_margin: float = 0.001, recovery_as_collision: bool = false, max_collisions: int = 1)

void

remove_collision_exception_with(body: Node)

void

set_axis_lock(axis: BodyAxis, lock: bool)

bool

test_move(from: Transform3D, motion: Vector3, collision: KinematicCollision3D = null, safe_margin: float = 0.001, recovery_as_collision: bool = false, max_collisions: int = 1)


Описания свойств

bool axis_lock_angular_x = false 🔗

Зафиксируйте вращение тела по оси X.


bool axis_lock_angular_y = false 🔗

Зафиксируйте вращение тела по оси Y.


bool axis_lock_angular_z = false 🔗

Зафиксируйте вращение тела по оси Z.


bool axis_lock_linear_x = false 🔗

Зафиксируйте линейное движение тела по оси X.


bool axis_lock_linear_y = false 🔗

Зафиксируйте линейное движение тела по оси Y.


bool axis_lock_linear_z = false 🔗

Зафиксируйте линейное движение тела по оси Z.


Описания метода

void add_collision_exception_with(body: Node) 🔗

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


bool get_axis_lock(axis: BodyAxis) const 🔗

Возвращает true, если указанная линейная или вращательная axis заблокирована.


Array[PhysicsBody3D] get_collision_exceptions() 🔗

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


Vector3 get_gravity() const 🔗

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


KinematicCollision3D move_and_collide(motion: Vector3, test_only: bool = false, safe_margin: float = 0.001, recovery_as_collision: bool = false, max_collisions: int = 1) 🔗

Перемещает тело вдоль вектора motion. Чтобы не зависеть от частоты кадров в Node._physics_process() или Node._process(), motion следует вычислять с помощью delta.

Тело остановится, если столкнется. Возвращает KinematicCollision3D, который содержит информацию о столкновении при остановке или при касании другого тела по ходу движения.

Если test_only равен true, тело не движется, но предоставляется информация о возможном столкновении.

safe_margin — это дополнительный запас, используемый для восстановления после столкновения (см. CharacterBody3D.safe_margin для получения более подробной информации).

Если recovery_as_collision равен true, любое отклонение от фазы восстановления также сообщается как столкновение; это используется, например, от CharacterBody3D для улучшения обнаружения пола во время привязки к полу.

max_collisions позволяет получить более одного результата столкновения.


void remove_collision_exception_with(body: Node) 🔗

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


void set_axis_lock(axis: BodyAxis, lock: bool) 🔗

Блокирует или разблокирует указанную линейную или вращательную axis в зависимости от значения lock.


bool test_move(from: Transform3D, motion: Vector3, collision: KinematicCollision3D = null, safe_margin: float = 0.001, recovery_as_collision: bool = false, max_collisions: int = 1) 🔗

Проверяет наличие столкновений без перемещения тела. Чтобы не зависеть от частоты кадров в Node._physics_process() или Node._process(), motion следует вычислять с помощью delta.

Виртуально устанавливает положение, масштаб и поворот узла в соответствии с заданным Transform3D, затем пытается переместить тело по вектору motion. Возвращает true, если столкновение остановит движение тела по всему пути.

collision — необязательный объект типа KinematicCollision3D, который содержит дополнительную информацию о столкновении при остановке или при касании другого тела по ходу движения.

safe_margin — дополнительный запас, используемый для восстановления столкновений (подробнее см. в CharacterBody3D.safe_margin).

Если recovery_as_collision равен true, любое отклонение от фазы восстановления также сообщается как столкновение; это полезно для проверки того, будет ли тело касаться других тел.

max_collisions позволяет получить более одного результата столкновения.