NavigationMeshGenerator
Застаріло: This class may be changed or removed in future versions.
Успадковує: Object
Помічник класу створення і очищення навігаторів.
Опис
Цей клас відповідає за створення та очищення тривимірних навігаційних сіток, які використовуються як ресурси NavigationMesh в NavigationRegion3D. NavigationMeshGenerator дуже обмежено або зовсім не використовується для 2D, оскільки процес запікання навігаційної сітки передбачає аналіз 3D-типів вузлів і 3D-геометрії джерела.
Увесь запікання навігаційної сітки найкраще виконувати в окремому потоці, оскільки вокселізація, тести на зіткнення та оптимізація сітки є дуже повільними та потребують високої продуктивності.
Запікання навігаційної сітки відбувається в кілька етапів, і результат залежить від геометрії 3D-джерела та властивостей ресурсу NavigationMesh. На першому кроці, починаючи з кореневого вузла та залежно від властивостей NavigationMesh, усі дійсні 3D вихідні вузли геометрії збираються з SceneTree. По-друге, усі зібрані вузли аналізуються на відповідні дані 3D-геометрії, і створюється комбінована 3D-сітка. Через багато різних типів аналізованих об’єктів, від звичайних MeshInstance3D до CSGShape3D або різноманітних CollisionObject3D, деякі операції збору геометричних даних можуть запускати синхронізацію RenderingServer і PhysicsServer3D. Синхронізація сервера може негативно вплинути на час запікання або частоту кадрів, оскільки часто передбачає блокування Mutex для безпеки потоку. Багато об’єктів, які можна аналізувати, і безперервна синхронізація з іншими потоковими серверами можуть значно збільшити час запікання. З іншого боку, лише кілька, але дуже великих і складних об’єктів займуть деякий час для підготовки до Серверів, що може помітно призупинити рендеринг наступного кадру. Як правило, загальна кількість об’єктів, які можна аналізувати, а також їхній індивідуальний розмір і складність мають бути збалансовані, щоб уникнути проблем із частотою кадрів або дуже тривалого часу запікання. Потім об’єднана сітка передається до Recast Navigation Object, щоб перевірити вихідну геометрію для прохідної місцевості, яка відповідає властивостям агента NavigationMesh, шляхом створення воксельного світу навколо обмежувальної області сіток.
Потім завершена навігаційна сітка повертається та зберігається всередині NavigationMesh для використання як ресурс у вузлах NavigationRegion3D.
Примітка: Використання сіток не лише для визначення поверхонь, по яких можна ходити, але й для перешкоджання навігаційному запіканню, не завжди працює. Навігація не має уявлення про те, що таке геометрія «всередині» при роботі з геометрією джерела сітки, і це зроблено навмисно. Залежно від поточних параметрів запікання, щойно загороджувальна сітка стане достатньо великою, щоб помістити всередину область навігаційної сітки, запікання створить області навігаційної сітки, які знаходяться всередині сітки геометрії джерела загородження.
Посібники
Методи
void |
bake(navigation_mesh: NavigationMesh, root_node: Node) |
void |
bake_from_source_geometry_data(navigation_mesh: NavigationMesh, source_geometry_data: NavigationMeshSourceGeometryData3D, callback: Callable = Callable()) |
void |
clear(navigation_mesh: NavigationMesh) |
void |
parse_source_geometry_data(navigation_mesh: NavigationMesh, source_geometry_data: NavigationMeshSourceGeometryData3D, root_node: Node, callback: Callable = Callable()) |
Описи методів
void bake(navigation_mesh: NavigationMesh, root_node: Node) 🔗
Застаріло: This method is deprecated due to core threading changes. To upgrade existing code, first create a NavigationMeshSourceGeometryData3D resource. Use this resource with parse_source_geometry_data() to parse the SceneTree for nodes that should contribute to the navigation mesh baking. The SceneTree parsing needs to happen on the main thread. After the parsing is finished use the resource with bake_from_source_geometry_data() to bake a navigation mesh.
Запікає navigation_mesh з вихідною геометрією, зібраною, починаючи з root_node.
void bake_from_source_geometry_data(navigation_mesh: NavigationMesh, source_geometry_data: NavigationMeshSourceGeometryData3D, callback: Callable = Callable()) 🔗
Bakes the available navigation_mesh з даними з наданої source_geometry_data. Після завершення процесу буде викликано додаткове callback.
void clear(navigation_mesh: NavigationMesh) 🔗
Видаліть всі полігони та вершини з наданої Navigation_mesh ресурс.
void parse_source_geometry_data(navigation_mesh: NavigationMesh, source_geometry_data: NavigationMeshSourceGeometryData3D, root_node: Node, callback: Callable = Callable()) 🔗
Парус SceneTree для геометрії джерела за властивостями Navigation_mesh. Оновлення наданої джерело_geometry_data ресурсу з отриманими даними. Після цього ресурс може бути використаний для запікання навігаційної сітки з bake_from_source_geometry_data(). Після завершення процесу буде викликано додаткове callback.
Примітка: Ця функція повинна працювати на головному нитці або з відстроченим виклик як SceneTree не є нижчою.
Продуктивність: Під час зручного читання масивів даних з ресурсів Mesh може негативно вплинути на частоту кадрів. Дані повинні бути отримані від GPU, стеблінгу RenderingServer в процесі. Для виконання воліє використання електронних форм зіткнення або створення масивів даних повністю в коді.