L4D Level Design/Nav Meshes/ru

From Valve Developer Community
Jump to: navigation, search

Сейчас мы создадим навигационную сетку (коротко Nav) для нашего уровня. Навигационная сетка представляет собой "зоны передвижения ботов" на карте. Это позволяет ботам-выжившим и инфицированным "знать", как передвигаться в окружении.

Создание tutorial04.vmf и компиляция

Откройте в Hammer файл карты tutorial03.vmf, который вы создали в предыдущем учебнике. По умолчанию, он должен находиться в папке mapsrc:

C:\Program Files\Steam\steamapps\common\left 4 dead\sdk_content\mapsrc\

Сделаем новую версию для работы, и сохраним ее:

  • Откройте меню File и выберите Save As...
  • Измените имя на tutorial04.vmf.
  • Нажмите F9, чтобы открыть окно Run Map, нажмите кнопку OK для начала компиляции.

Getting Started

После загрузки уровня:

  1. Перед нами появится диалог "Map is unplayable", так как у нас нет навигационной сетки. Нажмите Continue чтобы убрать этот диалог.
  2. Откройте консоль разработчика ` (тильда)
  3. Введите "director_stop" и нажмите Enter.
    Это остановит создание зараженных AI директором.
  4. Введите "nb_delete_all" и нажмите Enter.
    Это удалит всех зараженных и ботов выживших.
  5. Введите "nav_edit 1" и Enter.
    Это переключит игру в режим редактирования навигации.
  6. Спрячьте консоль снова нажав на `.

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

Размещение nav_mark_walkable.

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

Откройте консоль и введите "nav_mark_walkable" и нажмите Enter.

Закрыв консоль, вы увидите пирамидообразную фигуру на земле куда вы указали.

Значит вы расположили маркер генерации навигации называемый "nav_mark_walkable".

Навигационная поверхность сгенерирована автоматически.

Снова откройте консоль и введите "nav_generate_incremental" и нажмите Enter.

Эта команда сгенерирует навигационную поверхность вокруг nav_mark_walkable. Навигационная поверхность представлена как несколько соединенных прямоугольных блоков.

Note.pngПримечание:Если у вас большой уровень, то вам надо поставить больше nav_mark_walkable на вашем уровне. У каждого nav_mark_walkable ограничен радиус создаваемой навигационной поверхности. In general, build nav areas for one section at a time to keep the nav mesh clean.
Tip.pngСовет:Комманда nav_generate_incremental автоматически сохраняет навигационную поверхность вашей карты при запуске. Если вы хотите сохраниться вручную,то вы можете использовать комманду "nav_save".

Выделение навигационной зоны

После выполнения nav_generate_incremental , все новые навигационные поверхности будут выделены. Это ставновится удобным, когда у вас есть ошибка и вы хотите сгенерировать навигационную поверхность снова. Для удаления выделенной навигационной поверхности, введите комманду "nav_delete" в консоли. Эта комманда удалит все выделенные навигационные поверхности. Если вы сделаете это, то вы можете создать навигационную поверхность размещение другого nav_mark_walkable и выполнения nav_generate_incremental.

  • Чтобы снять выделение, введите "nav_clear_selected_set".
  • Чтобы выделить навигационную зону, наведите прицел на зону и введите "nav_toggle_in_selected_set". эта комманда выделит навигационную зону на которую вы прицелились.

Nav файлы конфигурации

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

Файл конфигурации (cfg) был включен для легкого старта.

Откройте консоль и введите:

bind PGDN "exec nav_mode"

и нажмите Enter.

Теперь при нажатии на клавишу Page Down игра будет переключаться между режимами "Редактирование Nav" и "Режим игры".

Привязывание ваших клавиш (для профессионалов)

Чтобы привязать свои собственные клавиши с помощью bind, откройте консоль и напишит"

bind <key> "консольная команда"

Например, если вы хотите привязать клавишу Z к "nav_toggle_in_selected_set", напишите это в вашей консоли:

bind z "nav_toggle_in_selected_set"

Вы можете открыть left4dead/cfg/nav_mode.cfg в любом текстовом редакторе чтоб изменить или добавить бинды(привязка команды к кнопке).

  • Для дополнительно информации прочтите Bind.
Note.pngПримечание:С этого момента туториал указывает кнопки из стандартного nav_mode.cfg. Если вы редактировали nav_mode.cfg то вам придется использовать свои бинды соответствующие нужным командам .

Разделение навигационных зон

You will also notice that the Nav Mesh in your level currently has large areas that cover the entire room. Sometimes, it's necessary to split those large areas into smaller ones. For example, if you want to add an attribute like where the survivors start and you want the area to be right in front of the weapons table. Вы можете разделять нав. зоны используя команду "nav_split".

The white line previews the split that you can make.

Во включенном в комплект SDK nav_mode.cfg команда nav_split забиндена на кнопку Insert.

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

As you point at the nav areas, you will see a white line that moves either North/South or East/West with your cursor. Position the cursor so that a line draws to the right of the weapon table in the first room you created.

Эта линия показывает где зона будет разрезана если вы введете nav_split в консоли.

Выполнение nav_split.

Нажмите Insert что бы выполнить разделение зоны.

Разделение нав. зоны в другом направлении.

Теперь поставьте курсор так, что бы разделить нав. зону перед столом пополам как показано на рисунке.

Нажмите Insert что бы выполнить разрезание и увидеть результат.

Добавление аттрибутов

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


Сперва, введите в консоли команду "z_debug 1" чтобы перейти в режим редактирования атрибутов.


Итак,в первой навигационной сетке что мы создадим,мы определим где Выжившие начнут игру,когда они появятся на карте. Давайте пометим зону напротив столика с оружием как "PLAYER_START"

Наведите курсор на зону напротив столика с оружием и введите в консоли "nav_toggle_in_selected_set" или же по умолчанию через клавишу Z.


Выделение навигационной зоны с nav_toggle_in_selected_set.

Теперь вызовите консоль,введите "mark PLAYER_START" и нажмите клавишу Enter.


Маркировка навигационной зоны атрибутом PLAYER_START .

Это операция пометит выделенную зону как Стартовую позицию для Выживших.Зона должна окрасится в фиолетовый цвет.

Tip.pngСовет:если вы пометили зону каким либо атрибутом и вы через некоторое время захотите этот атрибут убрать , выделите зону и введите в консоли "clear_attribute <attribute name>" чтобы убрать атрибут. Например: clear_attribute PLAYER_START

Left 4 Dead требует корректных навигационных зон в его уровнях,чтобы Ai Director работал должным образом. Для этого простого тестового уровня,мы используем другой атрибут под названием "FINALE".

Пройдите ниже ко второй комнате этого уровня и выделите эту зону путём нажатия клавиши Z

Выделение навигационной зоны во второй комнате.

Вызовите консоль,введите "mark FINALE" и нажмите клавишу Enter.

Маркировка навигационной зоны атрибутом FINALE .


Эта операция пометит эту комнату как финальную зону,и зона окрасится в голубой цвет

Теперь,на этом уровне имеется всё необходимое для того чтобы Ai Direcor работал должным образом . Теперь Директор сможет создать "путь" от стартовой точки до предназначаемой точки.

Чтобы сделать уровень немного более "играбельным " давайте пометим зоны вокруг Стартовой точки атрибутами "EMPTY" ,если конечно игрок не хочет чтобы при старте игры на него сразу напала толпа мобов .

Выделите все зоны вокруг Стартовой точки клавишей Z.

Выделение навигационных зон в первой комнате атрибутами PLAYER_START.

Вызовите консоль,введите "mark EMPTY" и нажите Enter.

Маркировка выделенных зон атрибутом EMPTY .

Эта операция предотвращает "блуждание" обычных заражённых,которые появляются при старте карты.


Note.pngПримечание:Это не предотвращает спавн мобов в этой зоне в дальнейшем.Для этого вам нужно будет ввести атрибут "NO_MOBS" .

Сохраните навигационную сетку путём ввода в консоли "nav_save".

Удаление навигационных зон

Если вы совершили ошибку или нашли ошибки после авто-генерации навигационной сетки,вы можете удалить навигационные зоны введя в консоли "nav_delete".Например,на столе с оружием совсем не актуально выглядит навигационная зона,тем более это может привести к тому что боты будут забираться на него,что крайне не желательно.


В конфиг файле это действие "забиндено" на клавишу Delete.

Чтобы удалить навигационную зону,укажите не неё,выделите клавишей Z .Убедитесь в том что выделены только те зоны,которые вы намерены удалить, после этого нажмите клавишу Delete.

Анализ Nav

Ваша первая Nav поверхность в игре.

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

Откройте консоль и введите "nav_analyze" и нажмите Enter.

Это процедура может занять несколько минут, после этого карта будет перезагружена.

Для проверки правильности создания зараженных используйте "director_start" в консоли и перезагрузите уровень коммандой "map tutorial04".

Ваша сцена должна выглядить наподобии этой.

= Добавление Nav к лестницам

Если вы запустите tutorial03 в игре, и включите nav_edit 1, то Вы увидите как выглядит лестница с размещенной нав. сеткой на ней.

Создание нав. для лестницы.

Что бы создать нав. на func_ladder, наведите курсор нее в режиме nav_edit 1 и напишите "nav_build_ladder" в консоли.

Note.pngПримечание:Курсор становится зеленым при наведении на func_ladder.

Объединение Nav зон

Несмотря на то что большинство зон создаются правильно при использовании nav_generate_incremental, могут быть зоны, которые вам захочется изменить. For example, the catwalk we created in tutorial03 might not have connected properly to the areas below it.

Объединение nav зон.

Что бы обьеденить 2 нав. зоны выделите их и напишите "nav_connect" End в консоли. Это соединит 2 зоны в обоих направлениях и отметит голубой линией как показано на рисунке . Зараженные смогут забираться (они могут забраться на любое препятствие 180 юнитов или ниже)и спрыгивать. Выжившие смогут спрыгнуть.

Что бы соединить 2 зоны только в одном направлении Вам надо выделить зону, которую хотите присоединить навести курсор на ту к которой хотите присоединить и нажать End или написать "nav_connect" в консоли.

Убедитесь что зоны не накладываются друг на друга. Это может вызвать ошибку анимации Зараженных.

Drawing your own Nav areas

Sometimes the nav_generate_incremental leaves out areas that you want to have nav on. In these cases, you will need to draw your own nav area.

Drawing nav areas is done with 2 keys. One key is bound to "nav_begin_area" and other bound to "nav_end_area". The nav.cfg file has nav_begin_area bound to the left mouse button and "nav_end_area" bound to the right mouse button.

Point to the area you want to create an area and click the left mouse button. As you move the mouse around, you can see where the nav area will draw until you press the right mouse button to end drawing and create the area.

Drawing a nav area.

Click the right mouse to activate nav_end_area and see the result.

Note.pngПримечание:Creating your own nav areas will not automatically connect them to the rest of the nav mesh. Use nav_connect to connect them to adjacent areas.
Tip.pngСовет:If you accidentally press the left mouse button when you don't want to draw a nav area, just press the left mouse button again and it will cancel the nav creation.

Grid snapping when drawing nav

You might notice that the cursor doesn't snap to a grid when you're in this mode. You can set the snapping properties using "nav_snap_to_grid" in the console.

Tip.pngСовет:In the nav.cfg, the F9 key is bound to "incrementvar nav_snap_to_grid 0 2 1". This will change the grid size when you press the bound key and continue to toggle through the sizes each time you press the F9 key.

It is also possible to draw a ladder using nav_begin_area and nav_end area. Simply point at a corner of the ladder and move the cursor vertically to go to the opposite corner.