RayCast3D

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

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

Опис

Raycast представляє промінь від його початку до його target_position, який знаходить найближчий об’єкт на своєму шляху, якщо він перетинає будь-який.

RayCast3D може ігнорувати деякі об’єкти, додаючи їх до списку винятків, ігноруючи звіти про виявлення Area3D (collide_with_areas) або PhysicsBody3D (collide_with_bodies), або налаштовуючи фізичні шари.

RayCast3D обчислює перетин кожного фізичного кадру та зберігає результат до наступного фізичного кадру. Для негайного raycast або якщо ви хочете налаштувати RayCast3D кілька разів у межах одного фізичного кадру, використовуйте force_raycast_update().

Щоб охопити область 3D-простору, ви можете наблизити область за допомогою кількох RayCast3D або використати ShapeCast3D.

Посібники

Властивості

bool

collide_with_areas

false

bool

collide_with_bodies

true

int

collision_mask

1

Color

debug_shape_custom_color

Color(0, 0, 0, 1)

int

debug_shape_thickness

2

bool

enabled

true

bool

exclude_parent

true

bool

hit_back_faces

true

bool

hit_from_inside

false

Vector3

target_position

Vector3(0, -1, 0)

Методи

void

add_exception(node: CollisionObject3D)

void

add_exception_rid(rid: RID)

void

clear_exceptions()

void

force_raycast_update()

Object

get_collider() const

RID

get_collider_rid() const

int

get_collider_shape() const

int

get_collision_face_index() const

bool

get_collision_mask_value(layer_number: int) const

Vector3

get_collision_normal() const

Vector3

get_collision_point() const

bool

is_colliding() const

void

remove_exception(node: CollisionObject3D)

void

remove_exception_rid(rid: RID)

void

set_collision_mask_value(layer_number: int, value: bool)


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

bool collide_with_areas = false 🔗

  • void set_collide_with_areas(value: bool)

  • bool is_collide_with_areas_enabled()

true, зіткнення з Area3D будуть повідомлені.


bool collide_with_bodies = true 🔗

  • void set_collide_with_bodies(value: bool)

  • bool is_collide_with_bodies_enabled()

true, зіткнення з PhysicsBody3D будуть повідомлені.


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

Маска зіткнення променів. Виявлено лише об’єкти, що не менше одного з шарів зіткнення. Див. Коллізійні шари та маски в документації для отримання додаткової інформації.


Color debug_shape_custom_color = Color(0, 0, 0, 1) 🔗

  • void set_debug_shape_custom_color(value: Color)

  • Color get_debug_shape_custom_color()

У меню Debug ввімкнено ** користувацький колорит . Цей колір буде виділений в режимі run-time, якщо **RayCast3D є співвідношенні з чимось.

Якщо встановити на Color(0.0, 0.0, 0.0) (за замовчуванням), колір встановлюється в ProjectSettings.debug/shapes/collision/shape_color.


int debug_shape_thickness = 2 🔗

  • void set_debug_shape_thickness(value: int)

  • int get_debug_shape_thickness()

Якщо встановити до 1, то рядок використовується як форма дебюг. В іншому випадку обрізається обрізна піраміда для представлення RayCast3D. Потрібні Відомі фігури Collision, щоб бути ввімкнені в меню Debug для форми debug, щоб бути видимими на run-time.


bool enabled = true 🔗

  • void set_enabled(value: bool)

  • bool is_enabled()

Якщо true будуть повідомлені зіткнення.


bool exclude_parent = true 🔗

  • void set_exclude_parent_body(value: bool)

  • bool get_exclude_parent_body()

Якщо значення true, цей raycast не повідомлятиме про зіткнення з батьківським вузлом. Ця властивість має ефект лише в тому випадку, якщо батьківський вузол є CollisionObject3D. Див. також Node.get_parent() та add_exception().


bool hit_back_faces = true 🔗

  • void set_hit_back_faces(value: bool)

  • bool is_hit_back_faces_enabled()

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


bool hit_from_inside = false 🔗

  • void set_hit_from_inside(value: bool)

  • bool is_hit_from_inside_enabled()

Якщо true, промінь виявить удар при запуску внутрішніх форм. У цьому випадку норма зіткнення буде Vector3(0, 0, 0). Чи не впливає на форми без об'єму, як приховати полігон або карту висоти.


Vector3 target_position = Vector3(0, -1, 0) 🔗

  • void set_target_position(value: Vector3)

  • Vector3 get_target_position()

Точка призначення променя відносно цього променевого потоку Node3D.position.


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

void add_exception(node: CollisionObject3D) 🔗

Додає виняток колізії, щоб промінь не повідомляв про колізії із зазначеним вузлом node.


void add_exception_rid(rid: RID) 🔗

Додає виключення зіткнення, тому промінь не повідомляє зіткнення з вказаною RID.


void clear_exceptions() 🔗

Видаліть всі винятки зіткнення для цього променя.


void force_raycast_update() 🔗

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

Примітка: enabled не потрібно true для цього для роботи.


Object get_collider() const 🔗

Повертає перший об’єкт, який перетинає промінь, або null, якщо жоден об’єкт не перетинає промінь (тобто is_colliding() повертає false).

**Примітка: ** Цей об’єкт не гарантовано буде CollisionObject3D. Наприклад, якщо промінь перетинає CSGShape3D або GridMap, метод поверне екземпляр CSGShape3D або GridMap.


RID get_collider_rid() const 🔗

Повертає RID першого об'єкта, який перетинає промінь, або порожнє значення RID, якщо жоден об'єкт не перетинає промінь (тобто is_colliding() повертає false).


int get_collider_shape() const 🔗

Повертає ідентифікатор форми першого об’єкта, який перетинає промінь, або 0, якщо жоден об’єкт не перетинає промінь (тобто is_colliding() повертає false).

Щоб отримати пересічний вузол фігури для цілі CollisionObject3D, використовуйте:

var target = get_collider() # CollisionObject3D.
var shape_id = get_collider_shape() # Індекс форми в коллайдері.
var owner_id = target.shape_find_owner(shape_id) # Ідентифікатор власника в коллайдері.
var shape = target.shape_owner_get_owner(owner_id)

int get_collision_face_index() const 🔗

Повернення індексу зіткнення на місці зіткнення, або -1, якщо форма перетинає променя не є ConcavePolygonShape3D.


bool get_collision_mask_value(layer_number: int) const 🔗

Повертаємо, чи не вказаний шар collision_layer, враховуючи layer_number між 1 і 32.


Vector3 get_collision_normal() const 🔗

Повертає нормаль форми об'єкта, що перетинається, у точці зіткнення, або Vector3(0, 0, 0), якщо промінь починається всередині форми, а hit_from_inside має значення true.

Примітка: Переконайтеся, що is_colliding() повертає true перед викликом цього методу, щоб переконатися, що повернена нормаль є коректною та актуальною.


Vector3 get_collision_point() const 🔗

Повертає точку зіткнення, в якій промінь перетинає найближчий об'єкт у глобальній системі координат. Якщо hit_from_inside має значення true, а промінь починається всередині фігури зіткнення, ця функція поверне точку початку координат променя.

Примітка: Переконайтеся, що is_colliding() повертає true перед викликом цього методу, щоб переконатися, що повернута точка є коректною та актуальною.


bool is_colliding() const 🔗

Повертає будь-який об'єкт, що перетинається з вектором променя (визнання довжини вектора).


void remove_exception(node: CollisionObject3D) 🔗

Видаляє виняток зіткнення, щоб промінь міг повідомляти про зіткнення із зазначеним node.


void remove_exception_rid(rid: RID) 🔗

Видаляє виняток колізії, щоб промінь міг повідомляти про колізії із зазначеним RID.


void set_collision_mask_value(layer_number: int, value: bool) 🔗

На основі value, умикає чи вимикає зазначений шар в collision_mask, для layer_number між 1 і 32.