Редактирование навигационной сетки

From Valve Developer Community
< Ru
Jump to navigation Jump to search
English (en)Español (es)日本語 (ja)Русский (ru)Translate (Translate)
Info content.png
This page needs to be translated.
This page either contains information that is only partially or incorrectly translated, or there isn't a translation yet.
If this page cannot be translated for some reason, or is left untranslated for an extended period of time after this notice is posted, the page should be requested to be deleted.
Also, please make sure the article tries to comply with the alternate languages guide.
Navigation Meshes

Эта страница посвящена созданию и редактированию файла NAV(en) для карты в игре.

Список команд см. в разделе Команды навигационной сетки(en).

Автоматическая генерация навигационной сетки

Новый вид навигационной сетки <game>/maps/<mapname>.nav (<игра>/карты/<имя карты>.nav) создается с помощью команды nav_generate во время загрузки карты, которая требует sv_cheats 1. В зависимости от размера и сложности карты, это может занять от нескольких минут до нескольких часов. Но в основном эта операция длится5 минут. Однако большие леса являются примером структур, для которых расчет .nav может занять много времени. Затем вы можете загрузить созданный файл .nav на свой сервер.

Note.pngПримечание:nav_quicksave 1 не позволяет nav_generate изменить сгенерированную сетку полностью проанализированными данными.

Рекомендуется, чтобы создатели карт создавали навигационные сетки, прежде чем опубликовать свою карту.

Note.pngПримечание:В Counter-Strike: Source и Counter-Strike: Global Offensive, если бот(en)ы были добавлены при отсутсвии файла .nav, игра автоматически создаст nav_generate (начиная с точек спавна). Это особенно влияет на пользовательские карты. Чтобы генерация .nav не занимала много времени можно убрать ботов с сервера bot_kick перед выбором команды.

Что вычисляется во время генерации

Во время создания навигационной сетки происходят следующие шаги:

  • Начиная с точки респауна игрока, ходимое пространство выбирается путем "заливки" из этой точки, ищя соседние ходимые точки;
  • Из отобранных данных строятся прямоугольные Навигационные области;
  • Вычисляются места для передышки и для снайперов;
  • Вычисляются места встреч и точки подхода (это может занять некоторое время);
  • Вычисляются начальные области встречи.

Просмотр навигационной сетки

Чтобы просмотреть сначала вам нужно включить sv_cheats 1 и ввести nav_edit 1. Чтобы выключить редактор сетки, введите nav_edit 0.

Чтобы увидеть все атрибуты Team Fortress 2 пропишите tf_show_mesh_decoration 1. Используйте tf_show_mesh_decoration_manual 1, чтобы скрыть автоматически создаваемые атрибуты Team Fortress 2.

Явное обозначение зон, пригодных для ходьбы (например: "Наверху нет сетки")

Некоторые карты с очень крутыми лестницами, пандусами или холмами могут запутать систему генерации, в результате чего навигационная сетка не покрывает всю карту. Чтобы решить эту проблему, вы можете вручную разместить дополнительные маркеры для ходьбы, которые будут указывать генератору на поиск в направлении от этой точки во время фазы выборки.

Чтобы добавить один или несколько маркеров, сначала направьте взгляд на известное место на карте, где можно ходить, затем введите nav_mark_walkable(en) в консоли. Когда вы закончите расставлять маркеры, введите nav_generate_incremental(en) (затем nav_clear_selected_set) или nav_generate для повторной генерации сетки.

Вы можете удалить все ранее размещенные ходовые маркеры с помощью команды nav_clear_walkable_marks.

Быстрая генерация сеток для тестирования

Фаза анализа генератора может отнимать много времени. Чтобы не ждать е завершения, введите в консоль nav_quicksave 1.

Note.pngПримечание:"Быстрое сохранение" пропускает фазу анализа, и в полученной навигационной сетке будут отсутствовать важные данные, для хорошей работы CS Bots и Hostages. Хотя это полезно для тестирования, редактирования и настройки навигационной сетки, обязательно проведите полный анализ (т.е.: nav_analyze с nav_quicksave 0), прежде чем опубликовать свой навигационный файл.

Редактирование навигационной сетки

Включенный редактор навигационной сетки на de_dust

Автоматический генератор навигационной сетки делает хорошую работу по созданию сетки (даже без запуска nav_quicksave 0), позволяя вам легко начать использовать ботов и заложников на пользовательских картах.

Однако тщательная ручная настройка навигационной сетки может заметно улучшить производительность ботов. Ручное редактирование сетки Названиями мест также позволяет ботам сообщать другим, где происходят события, что улучшает радар Counter-Strike и включает названия мест во все радиосообщения.

Чтобы включить редактор, введите nav_edit 1 в консоли (для выключения введите nav_edit 0).

  • Белый крест в центре экрана - это курсор.
  • Область навигации, на которую вы указываете, является выбранной областью и отображается желтым контуром.
  • Навигация Области, в которые можно попасть из выбранной области, показаны красным цветом.
  • Белая линия в выделенной области обозначает место, где область будет разделена, если будет выполнена команда nav_split.
Warning.pngПредупреждение:Редактирование навигационной сетки при активных ботах может привести к сбою игры, особенно удаление, разделение и объединение областей. Для безопасности сначала выполните bot_kick. Если вы закончили редактирование, nav_save сохраните свою работу и перезагрузите карту, прежде чем снова добавлять ботов.

Сохранение

В настоящее время в системе редактирования Navigation Mesh нет команды "отменить". Поэтому очень важно часто сохранять свою работу с помощью команды nav_save.

Создание новой области

Это можно сделать с помощью команд nav_begin_area и nav_end_area.

Поместите курсор в то место, где должен находиться угол новой области, и выполните команду nav_begin_area.
Переместите курсор, чтобы вытянуть границы области.
Поместите курсор в противоположный угол новой области и выполните команду nav_end_area.
Note.pngПримечание:Области, созданные таким образом, не имеют начальной связи с существующей навигационной сеткой.
Tip.pngСовет:Вы можете использовать nav_snap_to_grid 1, чтобы получить согласованные размеры прямоугольников.
Tip.pngСовет:Четыре угла получившегося участка будут находиться на одной высоте. Если земля не ровная, начинайте новые области с самого высокого угла, чтобы предотвратить создание области под полом. Плавающую область можно легко сдвинуть вниз к земле, используя nav_corner_place_on_ground при наведении на нее.
Tip.pngСовет:Новая созданная область будет подключаться к выделенной области nav_end_area.

Удаление

Чтобы удалить область, надо навести курсор на ненужную область, выделить её и прописать nav_delete. Также вы можете выбрать несколько область и удалить их.

Соединение двух областей

Одностороннее соединение (Выделено синими линиями) чаще всего используются для мест прыжков с высоты на землю.
Двухстороннее соединение (Выделено светло-синими линиями линиями у краёв) позволяет ботам проходить между двумя областями.

Соединения определяют, где боты могут перемещаться из одной области в другую.

Обычно соединения Двухсторонние, то есть боты могут свободно перемещаться между двумя областями. Однако, иногда могут понадобиться односторонние соединения, например, когда нужно чтобы боты могли спрыгнуть с верхней точки вниз. Также их можно использовать для установления направления, например, для совершения сложных прыжков.

Дабы сделать одностороннее движение из точки А в точку Б (то есть передвижение из точки Ф в точку Б):

  1. Выделите область А: На ведите курсор на неё и пропишите nav_mark.
  2. Нацельтесь на точку Б и введите nav_connect.

Чтобы сделать Двухстороннее движение, повторите шаги выше, поменяв местами А и Б.

Tip.pngСовет:В выбранном наборе, nav_connect будет пытаться двунаправленно соединить первую выделенную область и каждую последующую выбранную область. Выберите несколько областей и используйте nav_connect, чтобы сразу сделать двухстороннее соединение.

Отсоединение двух областей

Чтобы убрать все соединения между точками А и Б:

  1. Выделите область А: На ведите на неё курсор и пропишите nav_mark.
  2. Наведите курсор на область Б и пропишите nav_disconnect.
Tip.pngСовет:Если прописать nav_disconnect, когда выбрано несколько областей, он будет пытаться отсоединить друг от друга первые и последующие выбранные области.
Tip.pngСовет:Используйте nav_disconnect_outgoing_oneways,чтобы удалить все односторонние соединения. Эта команда также работает с несколько выбранными областями.

Разделение

Разделение делает из одной области две двухсторонне соединенные области.

Встаньте на нужную позицию и наведитесь курсором так, чтобы линия разделения была в нужном месте.
Введите nav_split и получите две взаимосвязанные области.

Объединение

Объединение позволяет уменьшить количество.

Обе области должны быть одинакового размера по краям. Но не обязательно чтобы они были смежными.

Полученная область унаследует связи обоих областей и их свойства (т.е.: Названия мест и т.д.).

Tip.pngСовет:При перемещении из точки A в точку B боты, как правило, предпочитают маршруты с меньшим количеством областей для путешествия, поэтому теоретически маршрут можно сделать более привлекательным для ботов, объединив некоторые области.
Нацельтесь на первую область и пропишитеnav_mark.
Нацельтесь на вторую область.
Введите nav_merge.

Сращивание

Сращивание позволяет создать новую область между двумя имеющимися. Это очень мощное орудие, которое можно использовать для легкого создания наклонных участков, как показано в примере ниже.

Tip.pngСовет:Не обязательно, чтобы две области имели одинаковую ширину. Ширина новой области будет выбрана из самой меньшей среди двух областей.
Нацельтесь на первую область и введите nav_mark.
Нацельтесь на вторую область.
Введите nav_splice.

Атрибуты области

Область с разрешением на прыжок и без.
Зоны ходьбы с приседанием.

Имеется куча атрибутов, с помощью которых область говорит ботам, что им делать, когда они касаются её. Все атрибуты могут быть увидены на небольшой срок, когда мы нацелены на них. Длительность можно изменить с помощью ConVar(en) nav_show_area_info. Чтобы создать атрибут надо нацелиться на нужную область и прописать команду, например nav_jump.

  • Область прыжков (отмечена зелёным X-ом) говорит ботам, что они должны прыгнуть, дабы добраться до области выше(соединенной), но эту область нельзя использовать как место для пережидания/снайперов.
  • 'Область приседания (отмечена синей диагональной линией) заставляет ботов приседать на этой области.
  • Область БЕЗ прыжков (отмечена красным ромбом) заставляет ботов не прыгать. Это можно использовать для сокращения прыжков. Но боты застревают, если для продолжения движения требуется прыжок, т.к. они не могут прыгнуть.
  • Область отступления (отмечена зелёным +-ом) останавливает передвижение ботов к препятствиям. Это полезно для мест, где легко провалиться, как мосты без ограждений.
  • Область торможения (отмечена красным восьмиугольником) говорит ботам придержать коней, прежде чем войти в другую область. Можно использовать, чтобы сделать аккуратный и точный прыжок.
  • Область бега (отмечена двумя синими стрелками) говорит ботам просто бежать.
  • Область шага (отмечена одной зелёной стрелкой) говорит ботам ходить бесшумно.
  • Область не для пряток (никак не отмечена) говорит ботам, что здесь нельзя спрятаться.
  • Область прямоходящих (никак не отмечена) говорит ботам не приседать здесь, пока они прячутся.

Помимо этих атрибутов, которые можно установить, есть ещё запретный атрибут (отмечен синим прямоугольником), который ставиться автоматически в определенных случаях, когда боты не могут или не должны пользоваться областью навигации.

Note.pngПримечание:Области могут быть недоступны для определенной команде в Team Fortress 2. Можно увидеть каким ботам заблокирован доступ с помощью tf_show_blocked_areas ConVar(en).

В Counter-Strike: Global Offensive, активный trigger_hurt энтити, заблокированные двери и func_nav_blocker(en) могут заблокировать навигационную область.

Использование привязок для редактирования сетки

Конечно эти команды можно вводить в консоль, но будет намного легче если использовать bind(en). Например, если ввести bind del nav_delete, а затем нажать Del, то мы удалим область, на которую наведен прицел (в режиме редактирования сетки).

Вы можете сделать несколько временных привязок за раз с помощью CFG(en) файла. Это очень удобно для редактирования сетки, т.к. здесь очень много команд и это не очень удобно привязывать их вручную. Просмотрите Editing Bot Navigation CFG File(en) для того чтобы найти готовый файл и инструкцию по его использованию.

Просмотрите Navigation Mesh Console Command Reference(en) для всех команд редактирования навигационной сетки в Counter-Strike: Global Offensive.

Выдача имён

Вы можете использовать выдачу имён, чтобы дать название месту на карта. скажем так, если на карте есть дома, то все области в нём можно наименовать "House".

Названия мест используют CS боты, чтобы сказать где они, радаром, чтобы показать местонахождение игрока, а также они важны для голосовых команд и радио. Например:

ChicagoTed @ Apartment (RADIO): Fire in the hole!

Добавление имён к области

Чтобы дать или изменить название области нужно включить редактор имён. Убедитесь что nav_edit равен 1 и пропишите

nav_toggle_place_mode.

Когда редактор имён включен (при условии, что ни одна область не была названа) все квадраты навигации станут красными. Чтобы выбрать Название нужной области пропишите

nav_use_place <name>,

взять хоть nav_use_place Bedroom. Затем, чтобы дать Название прицельтесь на нужную область и включите Режим Изменения Названий с помощью

nav_toggle_place_painting.

Когда Изменение Названий активно каждая область на которую в нажмёте получит Название, которое вы выбрали. Вы можете изменить название места с помощью nav_use_place <newname>, запомните, что после этого, все области, которым вы дали имя до этого будут синими, а области, которым вы только дадите имя — зелёными. Чтобы выйти из Режима Изменения Названий снова пропишите nav_toggle_place_painting.

Чтобы узнать все имеющиеся Названия, пропишите nav_use_place без аргумента. Смотрите также: Counter-Strike: Source Standard Place Names for CSS(en), Counter-Strike: Global Offensive Standard Place Names for CS:GO(en).
Существует несколько дополнительных команд, предоставляющие такие инструменты, как: пипетка, заливка, замена и т.д.. Для получения полной справки см. Place Name Commands.

Частые проблемы и их решение

Посторонние области на лестницах и пандусах

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

Перила

Перила — большая проблема для нынешней навигационной сетки, а именно звенья, которые проходят через перила. Их следует избегать, если в этом нет необходимости. В конечном итоге боты совершают эти прыжки, но при этом они не отличаются особой элегантностью.

Предотвращение чрезмерных прыжков

Используйте nav_no_jump чтобы предотвратить большое количество прыжков.

Note.pngПримечание:NO_JUMP не используется в Team Fortress 2 Team Fortress 2.

Работа с вращающимися дверями

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

Иногда боты будут пытаться проходить через дверь из одной области в другую, что приведёт к их застреванию. Может быть удаление смежной области или настройка областей и связей решит эту ошибку.

Продвинутые методы редактирования

Лестницы

Лестницы можно создать на области, по которой надо взбираться. Ваш курсор станет зелёным когда вы посмотрите на лестницу.

Использование nav_build_ladder

Это самый простой способ: посмотрите на лестницу и введите nav_build_ladder.

Посмотрите на лестницу
Лестница создана

Использование nav_begin_area и nav_end_area

Если nav_build_ladder не для вас, то можно создать лестницу так:

  1. Поместите курсор в тот угол, с которого начнётся лестница
  2. Введите nav_begin_area
  3. Переведите курсор в конец лестницы
  4. Введите nav_end_area

Этот способ можно использовать, чтобы бот, например, начал взбираться по лестнице и на полпути спрыгнул на ящик:

Начало лестницы с одного угла
Конец лестницы
Лестница создана

Переворот лестниц

Иногда лестница создаётся не той стороной. Если лестница выделена красным, то значит вы смотрите на неё сзади. А если зелёным, то значит вы смотрите спереди. Чтобы изменить ориентацию лестнице (как никак 21 век на дворе), посмотрите на неё и пропишите nav_ladder_flip.

Лестница смотрит на стену (неправильно)
Лестница встала к стене задом (правильно)

Избегание препятствий и точное движение

Используя nav_precise, nav_walk и nav_stop, можно выключить локальный алгоритм избежание препятствий и управления движением ботов.

Note.pngПримечание:WALK и STOP не используются в Team Fortress 2 Team Fortress 2.

Выделение областей, которых надо избегать

Использование nav_avoid говорит ботам избегать область пока обычный маршрут не станет слишком опасным. {{Note|AVOID не использован в Team Fortress 2

Удержание позиций для пряток

Используйте nav_dont_hide, чтобы боты не могли прятаться в этой области. Этим можно пользоваться, чтобы контролировать создание позиций для пряток во время фазы анализа.

Установление снайперских позиций

Отметьте область с помощью nav_walk и введите nav_make_sniper_spots. Это разделит область на множество маленьких, которые используются навигационной сеткой для побуждения снайперской стрельбы.

Note.pngПримечание:В Team Fortress 2 Team Fortress 2 места для пряток определяют только области, где скрываются TFBot Spies; Позиции снайперов создаются с помощью func_tfbot_hint, но они также используются снайперами в Tfwiki favicon.png Mann vs. Machine; С другой стороны, игра сама определяет позиции для снайперов.

Выстраивание сложных прыжков и узких дверных проемов

Наивысшая возможная зона достижения с прыжком-приседом

Размещение областей навигации для определенных путей.

  • Если боты застревают по бокам двери или окна, вы можете проложить узкий проход через середину проема.
  • Самое высокое значение, на которое бот попытается прыгнуть, составляет 58 юнитов. Если верхняя часть находится на 59 или более юнитов выше нижней, боты сдадутся сразу после прыжка. Если это происходит в месте, до которого боты действительно могут допрыгнуть, используйте nav_corner_lower, чтобы немного опустить верхнюю область навигации.

Импорт и Экспорт областей

Области могут быть импортированы и экспортированы с помощью nav_save_selected и nav_merge_mesh. nav_save_selected экспортирует область в выбранный KeyValues(en) файл, когда как nav_merge_mesh импортирует области из выбранного файла и выделяет их. KV(en) файл использует этими командами, чтобы создать отдельную область с формой и соединениями, которые невозможно создать.

Warning.pngПредупреждение:Дегенеративные области трудно выбрать и (к сведению) удалить, так что не создавайте их!
Нужно сделать: Опишите синтаксис и информацию файла.

Эти команды могут быть полезны, если:

  • Создание соединений, которые трудно или невозможно создать вручную с помощью nav_connect, например, двунаправленное соединение между двумя областями в areaportals(en).
  • Установление областей на наклонных поверхностях.

Смотрите также

Внешние ссылки