NavigationAgent3D
Експериментальний: This class may be changed or removed in future versions.
3D агент, який використовується для шляхуфінованої до положення, уникаючи перешкод.
Опис
3D-агент, який використовується для пошуку шляху до позиції, уникаючи статичних та динамічних перешкод. Розрахунок може бути використаний батьківським вузлом для динамічного переміщення його вздовж шляху. Для коректної роботи потрібні навігаційні дані.
Динамічні перешкоди уникаються за допомогою уникнення зіткнень RVO. Уникнення обчислюється перед фізикою, тому інформацію про пошук шляху можна безпечно використовувати на кроці фізики.
Примітка: Після встановлення властивості target_position метод get_next_path_position() необхідно використовувати один раз у кожному кадрі фізики для оновлення внутрішньої логіки шляху навігаційного агента. Повернена ним векторна позиція повинна використовуватися як наступна позиція руху для батьківського вузла агента.
Примітка: Кілька методів цього класу, такі як get_next_path_position(), можуть ініціювати новий розрахунок шляху. Виклик цих методів у зворотному виклику сигналу агента, наприклад, waypoint_reached, може спричинити нескінченну рекурсію. Рекомендується викликати ці методи на кроці фізики або, як варіант, відкласти їхній виклик до кінця кадру (див. Object.call_deferred() або Object.CONNECT_DEFERRED).
Посібники
Властивості
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
BitField[PathMetadataFlags] |
|
|
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методи
distance_to_target() const |
|
get_avoidance_layer_value(layer_number: int) const |
|
get_avoidance_mask_value(mask_number: int) const |
|
get_current_navigation_path() const |
|
get_current_navigation_result() const |
|
get_navigation_layer_value(layer_number: int) const |
|
get_navigation_map() const |
|
get_path_length() const |
|
get_rid() const |
|
is_target_reached() const |
|
void |
set_avoidance_layer_value(layer_number: int, value: bool) |
void |
set_avoidance_mask_value(mask_number: int, value: bool) |
void |
set_navigation_layer_value(layer_number: int, value: bool) |
void |
set_navigation_map(navigation_map: RID) |
void |
set_velocity_forced(velocity: Vector3) |
Сигнали
link_reached(details: Dictionary) 🔗
Заяви, що агент досягнув навігації. Увімкнено, коли агент рухається в межах path_desired_distance наступного положення шляху, коли ця позиція є навігаційним посиланням.
Словник деталей може містити такі ключі в залежності від значення path_metadata_flags:
позиція: Почати позицію посилання, яка була досягнута.
тип: Завжди NavigationPathQueryResult3D.PATH_SEGMENT_TYPE_LINK.rid: RID посилання.
власник: NavigationLink3D.
link_entry_position: Якщовласникдоступний і власник є NavigationLink3D, він міститиме глобальну позицію точки посилання, що надходить агент.link_exit_position: Якщовласникдоступний і власник NavigationLink3D, він міститиме глобальну позицію точки посилання, яку агент виходить з виходу.
navigation_finished() 🔗
Навігація агента завершено. Якщо мета досягається, навігація закінчується при досягненні цілей. Якщо мета ненадійна, навігація закінчується, коли досягається остання точка шляху. Цей сигнал видається тільки один раз на завантажені шлях.
Цей сигнал буде видано тільки після того, як target_reached, коли ціль досягається.
path_changed() 🔗
Увімкнути, коли агент повинен оновити завантажений шлях:
бо шлях був раніше порожнім.
через зміну навігаційної карти.
оскільки агент відштовхував далі від поточного сегмента шляху, ніж path_max_distance.
target_reached() 🔗
Сигналізує про те, що агент досяг цілі, тобто агент перемістився в межах target_distance від target_position. Цей сигнал випромінюється лише один раз на кожен завантажений шлях.
Цей сигнал буде випромінено безпосередньо перед navigation_finished, коли ціль буде досяжна.
Не завжди можливо досягти цілі, але завжди має бути можливість досягти кінцевої позиції. Див. get_final_position().
velocity_computed(safe_velocity: Vector3) 🔗
При обчисленні швидкості зіткнення. Увімкнено будь-яке оновлення, доки avoidance_enabled true і агент має навігаційну карту.
waypoint_reached(details: Dictionary) 🔗
Заяви, що агент досягнув точки шляху. Випробувано, коли агент рухається в межах path_desired_distance наступного положення шляху.
Словник деталей може містити такі ключі в залежності від значення path_metadata_flags:
позиція: Посада точки, яка досягла.тип: Тип навігаційної примітивності (регіон або посилання), що містить цю точку шляху.rid: RID містить навігаційний примітив (регіон або посилання).власник: Об'єкт, який керує навігацією (регіон або посилання).
Описи властивостей
bool avoidance_enabled = false 🔗
Якщо true агент зареєстрований для зворотного виклику RVO на NavigationServer3D. Коли velocity встановлена і обробка завершена safe_velocity Vector3 отримала з підключенням сигналу до Speed_computed. Унеможливлення обробки з багатьма зареєстрованими агентами має суттєву вартість виконання і повинна бути включена тільки до агентів, які наразі вимагають.
Бітове поле, що визначає шари уникнення для цього NavigationAgent. Інші агенти з відповідним бітом у avoidance_mask уникатимуть цього агента.
Бітове поле, яке визначає, яких інших агентів уникнення та перешкод цей NavigationAgent уникатиме, коли біт збігається принаймні з одним з їхніх avoidance_layers.
float avoidance_priority = 1.0 🔗
Засіб не налаштовує швидкість для інших агентів, які будуть відповідати avoidance_mask, але мають нижчу avoidance_priority. Це в свою чергу робить інші агенти з більш низьким пріоритетом коригувати свої нерівності ще більше, щоб уникнути зіткнення з цим агентом.
Якщо true показує візуальні ефекти для цього агента.
Color debug_path_custom_color = Color(1, 1, 1, 1) 🔗
true використовує цей колір для цього агента замість глобального кольору.
float debug_path_custom_point_size = 4.0 🔗
true використовує цей растровий розмір точки для рендерингових точок для цього агента замість глобального розміру точки.
bool debug_use_custom = false 🔗
Якщо true використовує визначені debug_path_custom_color для цього агента замість глобального кольору.
Висота агента уникнення. Агенти ігнорують інші агенти або перешкоди, які вище або нижче їх поточного положення + висота в 2D уникнення. Нема нічого в 3D уникнення, який використовує радіусні сфери самостійно.
Якщо true, і агент використовує 2D уникнення, він запам'ятається встановленою швидкістю осі і повторно його після покрокового уникнення. У той час як 2D уникнення не має осі і імітує на плоскій площині, ця установка може допомогти пом'якшити найбільш явний кліпінг на нерівній геометрії 3D.
Максимальна кількість сусідів для агента.
Максимальна швидкість, яка може переміщатися.
У бітфілді визначено навігаційні шари навігаційних регіонів цей агент буде використовуватися для розрахунку шляху. Змінюючи його під час робочого часу, очищаємо поточну навігацію і генеруємо новий, відповідно до нових навігаційних шарів.
float neighbor_distance = 50.0 🔗
Відстань до пошуку інших агентів.
float path_desired_distance = 1.0 🔗
Поріг відстані до точки шляху вважається досягнутим. Це дозволяє агентам не вразити точку шляху на шляху точно, але тільки досягти його загальної площі. Якщо це значення встановлюється занадто високою, навігаціяАгент пропускає точки на шляху, які можуть призвести до її виходу на навігацію сітки. Якщо ця величина встановлена занадто низька, навігаціяАгент буде застрягти в репатентній петлю, тому що вона буде постійно перевикористовувати відстань в наступну точку на кожен фізичний каркас оновлення.
float path_height_offset = 0.0 🔗
Висота зсуву відхилена від значення вісь в будь-якому векторному шляху для цієї NavigationAgent. NavigationAgent висота зсуву не змінюється або впливає на навігацію сітки або результат запиту. Додаткові навігаційні карти, які використовують регіони з навігаційними сітками, які розробник випікають з відповідним радіусом або значенням висоти, необхідні для підтримки різних агентів.
float path_max_distance = 5.0 🔗
Максимальна відстань агента допускається від ідеального шляху до кінцевого положення. Це може статися через спроби уникнути зіткнення. Коли максимальна відстань перевищена, вона перерахує ідеальний шлях.
BitField[PathMetadataFlags] path_metadata_flags = 7 🔗
void set_path_metadata_flags(value: BitField[PathMetadataFlags])
BitField[PathMetadataFlags] get_path_metadata_flags()
Додаткова інформація для повернення навігаційної доріжки.
PathPostProcessing path_postprocessing = 0 🔗
void set_path_postprocessing(value: PathPostProcessing)
PathPostProcessing get_path_postprocessing()
Постообробка шляху, застосована до необробленого коридору шляху, знайденого за допомогою pathfinding_algorithm.
float path_return_max_length = 0.0 🔗
Максимально допустима довжина повернутого шляху в одиницях одиниць. Шлях буде обрізано при перевищенні цієї довжини.
float path_return_max_radius = 0.0 🔗
Максимально допустимий радіус у світових одиницях, яким може бути повернутий шлях від початку шляху. Шлях буде обрізано при перевищенні цього радіуса. Порівняно з path_return_max_length, це дозволяє агенту пройти набагато далі, якщо йому потрібно обійти кут.
Примітка: Це виконає обрізання сфери, враховуючи лише фактичні точки шляху навігаційної сітки, причому перша позиція шляху буде центром сфери.
float path_search_max_distance = 0.0 🔗
Максимальна відстань, на якій може знаходитися пошуковий полігон від початкового полігону, перш ніж пошук шляху скасовує пошук шляху до (можливо, недосяжного або дуже далекого) полігону цільової позиції. У цьому випадку пошук шляху скидається та будує шлях від початкового полігону до полігону, який був знайдений найближчим до цільової позиції на даний момент. Значення 0 або нижче вважається необмеженим. У разі необмеженого значення пошук шляху шукатиме всі полігони, пов'язані з початковим полігоном, доки не буде знайдено полігон цільової позиції або не будуть вичерпані всі доступні опції пошуку полігонів.
int path_search_max_polygons = 4096 🔗
Максимальна кількість полігонів, що обшукуються перед пошуком шляху, скасовує пошук шляху до (можливо, недосяжного або дуже далекого) полігону цільової позиції. У цьому випадку пошук шляху скидається та будує шлях від початкового полігону до полігону, який був знайдений найближчим до цільової позиції на даний момент. Значення 0 або нижче вважається необмеженим. У разі необмеженого значення пошук шляху шукатиме всі полігони, пов'язані з початковим полігоном, доки не буде знайдено полігон цільової позиції або не будуть вичерпані всі доступні опції пошуку полігонів.
PathfindingAlgorithm pathfinding_algorithm = 0 🔗
void set_pathfinding_algorithm(value: PathfindingAlgorithm)
PathfindingAlgorithm get_pathfinding_algorithm()
Алгоритм стипендії, що використовується в доріжці.
Радіус дії агента. Це "ті" агента з уникнення та не маневреності, що контролює neighbor_distance.
Чи не впливає на нормальну патологію. Щоб змінити радіус стипендії актора NavigationMesh ресурсів з різною NavigationMesh.agent_radius і використовувати різні навігаційні карти для кожного розміру актора.
float simplify_epsilon = 0.0 🔗
Сума спрощення шляху у світових підрозділах.
Якщо true буде повернуто спрощену версію шляху з менш критичними точками шляху. Сума спрощування здійснюється за допомогою simplify_epsilon. Спрощування використовує варіант алгоритму Ramer-Douglas-Peucker для децимації кривих точок.
Удосконалення шляху може бути корисним, щоб пом'якшити різні шляхи, такі проблеми, які можуть виникати з певними типами агента та поведінками скриптів. Наприклад, агенти або уникнення в «відкритих полях».
float target_desired_distance = 1.0 🔗
Порога дистанції перед поставленою метою вважається досягнута. Досягнення цілі, target_reached вдається і навігація закінчується (див. is_navigation_finished() і navigation_finished).
Ви можете зробити навігацію в кінці початку, встановивши цю властивість значення більше path_desired_distance
Ви також можете зробити навігацію до цілі, ніж кожна окрема позиція шляху, встановивши цю властивість до значення нижче path_desired_distance (навігація не відразу закінчується при досягненні останнього шляху). Однак, якщо значення встановлена занадто низька, агент буде застрягти в репатентну петлю, оскільки він буде постійно перевикористовувати відстань до цілі на кожному фізичному каркасі оновлення.
Vector3 target_position = Vector3(0, 0, 0) 🔗
Якщо встановлено, у NavigationServer запитується новий шлях навігації від поточної позиції агента до target_position.
float time_horizon_agents = 1.0 🔗
Мінімальна кількість часу, для яких це пов’язано з алгоритмом зіткнень, безпечні для інших агентів. Чим більший номер, тим швидше агент відповідав іншим агентам, але меншу свободу при виборі його оксамитовості. Дуже висока вартість значно сповільнить рух агентів. Потрібні бути позитивними.
float time_horizon_obstacles = 0.0 🔗
Мінімальна кількість часу, для яких це пов’язано з алгоритмом зіткнень, безпечні щодо статичних перешкод уникає. Чим більший номер, тим швидше агент відповідав на статичні перешкоди уникнення, але меншу свободу при виборі своїх опонентів. Дуже висока вартість значно сповільнить рух агентів. Потрібні бути позитивними.
bool use_3d_avoidance = false 🔗
Якщо true, агент розраховує неухильність 3D omnidirectionally, наприклад, для ігор, які відбуваються в повітрі, підводному або просторі. Агенти, які використовують 3D-пошук, лише уникають інших агентів з використанням 3D-пошуку, а також реагують на перешкоди з боку радіуса. Вони ігнорують будь-які перешкоди на основі вершини.
Якщо false, агент розраховує неухильність в 2D по x і z-axes, ігноруючи вісь. Агенти, які використовують 2D, не тільки уникають інших агентів, використовуючи 2D уникнення, і реагують на перешкоди, що знаходяться в радіусі, або перешкоди для запобігання вершин. Інші агенти з використанням 2D уникнення, які нижче або вище їх поточного положення, включаючи height ігноруються.
Vector3 velocity = Vector3(0, 0, 0) 🔗
Налаштовує нову бажану швидкість для агента. Симулятор уникнення перешкод допоможе виконати цю швидкість, якщо це можливо, але змінить його, щоб уникнути зіткнення з іншими агентами та перешкодами. Коли агент зв'язується з новим положенням, скористайтеся set_velocity_forced(), а також для скидання внутрішньої швидкості моделювання.
Описи методів
float distance_to_target() const 🔗
Повертає відстань до цільової позиції, використовуючи глобальну позицію агента. Користувач повинен встановити target_position, щоб це було точним.
bool get_avoidance_layer_value(layer_number: int) const 🔗
Повертає, чи ввімкнено вказаний шар бітової маски avoidance_layers, залежно від значення layer_number від 1 до 32.
bool get_avoidance_mask_value(mask_number: int) const 🔗
Повертає, чи ввімкнено вказану маску бітової маски avoidance_mask, якщо задано mask_number значення від 1 до 32.
PackedVector3Array get_current_navigation_path() const 🔗
Повертає поточний шлях агента від початку до завершення глобальних координат. При зміні цільової позиції, або агент вимагає репатії. Масштаб шляху не призначений для використання в прямій дорозі, оскільки агент має свою внутрішню логіку шляху, яка буде пошкоджена шляхом зміни масиву шляху вручну. Використовуйте призначені get_next_path_position() один раз кожен кадр фізики, щоб отримати наступний шлях для руху агентів, оскільки ця функція також оновлюється логіку внутрішнього шляху.
int get_current_navigation_path_index() const 🔗
Повертає, що індекс агента в даний час навігаційний шлях PackedVector3Array.
NavigationPathQueryResult3D get_current_navigation_result() const 🔗
Повертає результат запиту на шлях агента в даний час.
Vector3 get_final_position() 🔗
Повернутися до кінцевої позиції поточного шляху навігації у глобальних координатах. Ця позиція може змінюватися, якщо агент повинен оновити навігаційний шлях, який робить агент випромінив сигнал path_changed.
bool get_navigation_layer_value(layer_number: int) const 🔗
Повертає, чи увімкнено вказаний шар бітової маски navigation_layers, залежно від значення layer_number від 1 до 32.
RID get_navigation_map() const 🔗
Повернення RID навігаційної карти для цього вузла навігації. Ця функція повертається завжди на карті, встановлену навігаційному вузлі, а не на карті абстрактного агента на навігаційний сервер. Якщо карта агента змінюється безпосередньо з API навігації навігацієюАгентний вузол не буде в курсі зміни карти. Використовуйте set_navigation_map() для зміни навігаційної карти для навігаціїAgent, а також оновлення агента на Навігаційний сервер.
Vector3 get_next_path_position() 🔗
Повертаємо наступну позицію у глобальних координатах, які можуть бути переміщені, переконавшись, що не існує статичних об’єктів. Якщо агент не має навігаційної доріжки, він поверне позицію батька агента. Використання цієї функції після кожного фізичного кадру необхідно оновити логіку внутрішнього шляху навігації.
float get_path_length() const 🔗
Повертає довжину поточного обчисленого шляху. Повернене значення — 0.0, якщо шлях все ще обчислюється або запит на обчислення ще не було надіслано.
Повернутися до RID цього агента на NavigationServer3D.
bool is_navigation_finished() 🔗
Повертаємо true, якщо навігація агента завершено. Якщо мета досягається, навігація закінчується при досягненні цілей. Якщо мета ненадійна, навігація закінчується, коли досягається остання точка шляху.
Примітка: В той час як true воліє зупинити виклик функції оновлення, такі як get_next_path_position(). Це дозволяє занурювати стоячий агент через виклик повторних оновлень шляху.
Повертає true, якщо get_final_position() знаходиться в межах target_desired_distance від target_position.
bool is_target_reached() const 🔗
Повертає true, якщо агент досягнув поставленої мети, тобто агент перейшов в межах target_desired_distance target_position. Не завжди можна досягти поставленої мети, але це завжди повинно бути можливим для досягнення кінцевої позиції. Див. get_final_position().
void set_avoidance_layer_value(layer_number: int, value: bool) 🔗
На основі значення параметра value вмикає або вимикає вказаний шар у бітовій масці avoidance_layers, маючи значення layer_number від 1 до 32.
void set_avoidance_mask_value(mask_number: int, value: bool) 🔗
На основі значення параметра value вмикає або вимикає вказану маску в бітовій масці avoidance_mask, маючи значення mask_number від 1 до 32.
void set_navigation_layer_value(layer_number: int, value: bool) 🔗
На основі значення параметра value вмикає або вимикає вказаний шар у бітовій масці navigation_layers, маючи значення layer_number від 1 до 32.
void set_navigation_map(navigation_map: RID) 🔗
Навігація RID навігаційної карти цього вузла навігації має використовуватися, а також оновлення `` agent`` на Навігаційний сервер.
void set_velocity_forced(velocity: Vector3) 🔗
Заміняє внутрішню швидкість при зіткненні симулятора з velocity. При підключенні агента до нової позиції ця функція повинна бути використана в одному кадрі. Якщо часто ця функція може отримати агенти, які застрягають.