Здравствуйте. Вы находитесь на сайте Unreal Level. Данный ресурс посвящен редакторам карт игр серии Unreal, UT и Gears of War. Основная цель сайта , помочь всем желающим освоить любой из редакторов вышеперечисленных серий. Наибольшим приоритетом на этом сайте, обладает редактор UnrealED for Unreal Engine 3 и редактор движка Unreal Engine 3.5, входящий в комплект разработки UDK, поскольку это наиболее актуальная на сегодняшний день технология.
UsingWaypoints
автор: FACH | 22 Февраля 2011 | Просмотров: 2852

Автор: Ричард Налезинский

Перевод: FACH

Оригинал: Using Waypoints 

 

Краткий обзор

Этот урок описывает создание максимально эффективной навигации для NPC, что бы AI передвигался по всему уровню. Данный урок в основном для конструкторов уровня, для более технического объяснения смотрите: «WaypointsTechnicalGuide».


Основы путей


Точки путей (Path Nodes)


На поверхности уровня размещается PathNodes (подкласс NavigationPoint), по которым ходят NPC или объемы (volumes), в которых NPC могут плавать. PlayerStarts – то же NavigationPoint, и они выполняют ту же самую навигационную функцию. Кроме того, InventorySpots автоматически размещаются в местоположение каждого pickup на уровне при строительстве путей (они невидимы, но Вы будете видеть связи путей с ними).

 

Для соединиться PathNodes, они должны находиться меньше чем в 1200 UU (программисты могут изменить MAXPATHDIST в nPath.h, чтобы изменить это значение). Наличие двух NavigationPoints слишком близко друг к другу (перекрывание) может вызвать у AI навигационные проблемы и это нужно избегать. Размещая PathNodes, цель состоит в том, чтобы, каждая игровая область уровня была покрыта PathNode или некоторой другой NavigationPoint. Область покрыта, если NPC может пройти по некоторым PathNode на расстоянии меньшим чем 1200 единиц, с абсолютно свободным проходом (то есть, не обходя вокруг чего-нибудь).

 

UsingWaypoints

 

Построение путей


После размещения PathNode, создается взаимосвязь NavigationPoints, выбирая AI Paths из меню Build (или сделать полную рекомпиляцию, выбрав Rebuild All из меню Build). Диапазон размеров персонажа, для которого строятся пути, определяется массивом PathSizes (ScoutClassName записанным в секцию [Engine.Engine] файла Engine.ini).

 

Если уровень содержит большое количество путей, то может потребоваться время, чтобы просчитать все пути. Чтобы настроить размещение путей, используйте кнопку Build Changed Paths в меню опций Build. Это только перестроит пути между NavigationPoints, которые были добавлены, удалены, или перемещены. Прежде чем сохранить и играть, нужно перестроить весь уровень.

 

Просмотр созданных путей

 

Как только пути созданы, мы их можем увидеть в любых окнах, поставив галку на Show Paths в меню Toggle Show Flags окна редактора.

Пути будут показаны как линии исходящие от одной NavigationPoint к другой. Если NPC могут проходить путь в любом направлении то, будет две линии со стрелкой, указывающей направление пути. Или будет одна линия со стрелкой направления пути.

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

 

Цвета путей

 

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

 

Оранжевый - воздушный путь, узкий

Светло-оранжевый - воздушный путь, широкий

Светло-фиолетовый - требует прыжка в высоту (выше чем обычный прыжок)

Синий - узкий путь

Зеленый - нормальная ширина пути

Белый - широкий путь

Розовый - очень широкий путь

Желтый - вынужденный путь

Фиолетовый - "продвинутый" (наступательный) путь (требует, чтобы использовался "интеллект"),

Красный - "односторонний" путь (то есть есть reachspec, идущий от узла A-> B, но не B-> A) (ПРИМЕЧАНИЕ: в недавних сборках это, было изменено на красно-штриховой, чтобы сделать легко заметным ситуацию с односторонним путем)

 

 

Отладка путей

 

По окончанию просчета, может появиться окно Map Check со списком Pathing ошибок и предупреждений. Нажав на ошибку, Вас перенесет к ошибочной NavigationPoint. Вызвать проверку карты на ошибки можно через меню Tools - Check map for errors...

Если AI NPC запутался или делает что-то непонятное, помогут следующие консольные команды:

Viewclass Pawn – рассмотреть выделенного AI NPC

ShowDebug - увидеть, что NPC AI думает и путь, которым он следует

RememberSpot - выделить местоположение, чтобы проверить в игре навигационный путь. Затем нужно использовать ShowDebug покажет Вам непрерывно обновляемый путь в то местоположение, которое Вы выделили когда вводили в консоль RememberSpot (FACH: вообще не понятно, как это работает)

 

Продвинутые пути

 

Двери

 

Дверная (Door) NavigationPoint (в УДК - DoorMarker) должна быть помещена в сочетании с любым Mover , который действует как дверь (на основании его позиции, он разрешает или блокирует движение между двумя областями). Door должны быть помещены в центр зоны влияния (как правило, в середину фактической статической сетки, использующейся в виде двери - но достаточно низко, чтобы она касалась земли). Есть также несколько важных свойств Door NavigationPoint, которые должны обновляться по мере необходимости:

DoorTagмувер, с которым связывается эта дверная точка

DoorTriggerтег триггера, которым открывается дверь, если такой есть

bInitiallyClosed – изначальное состояние мувера по умолчанию, если ложно, то позволяет пройти, или препятствует (если это правда - значение по умолчанию)

bBlockedWhenClosed - если мувер закрыт, не будет никакого пути для NPC, чтобы открыть его (ложно по умолчанию)

У муверов теперь есть свойство bAutoDoor. Если установлено в истину, Дверная PathNode автоматически создастся для того мувера. Это должно работать для большинства дверей.

 

JumpPads

 

JumpPads подбросит любую Пешку, прикоснувшуюся к нему в заданном направлении. JumpPads, траектория прыжка, создаются путем указания назначения PathNode в первый элемент ForcedPaths [ ] массива путей JumpPad . Соответствующий импульс – скорость, рассчитывается автоматически, когда пути будут перестроены. Значение вектора JumpModifier из JumpPad может быть изменено, если по какой-либо причине автоматическая генерация скорости некорректна.


JumpDests

 

JumpDests должен использоваться вместо PathNodes в любом месте, которое намного выше, чем можно подпрыгнуть. Он соединяется с путями ниже. JumpSpots будет использоваться NPC в зонах низкой гравитации, или во время какого-то импульсного скачка. Пути, которые бот может использовать от JumpSpot, должны быть в его массиве путей ForcedPath [ ].

 

Лифты

 

Мувер в виде, лифта никогда не должен быть всостоянии BumpOpenTimed (используйте StandOpenTimed вместо этого). Муверы - Лифты имеют два типа NavigationPoints, связывающих их. LiftCenter должен быть размещен в центре лифта. LiftExit должен быть размещен в каждом выходе из Лифта (но достаточно далеко, так, чтобы NPC, стоящий там, не задевал Лифт). У LiftCenter и LiftExits есть свойство LiftTag, - тег мувера. Кроме того, если лифт запускается, поместите тег запускающего его актера в LiftCenter в свойство LiftTrigger. У LiftExits также есть дополнительное свойство, SuggestedKeyFrame, в которое может быть установлено  число ключевого кадра мувера, когда LiftExit может использоваться. Это может улучшить навигацию NPC в некоторых ситуациях.

 

Лестницы


LadderVolumes
должен быть повернуты, к вертикальной стене (корректируя свойство WallDir, которое отображается на экране указательной стрелкой, когда LadderVolume выбран). В большинстве случаев мапперы могут получить Лестничные навигационные точки автоматически, при компиляции путей, вверху и внизу LadderVolume. Однако, если есть какие-либо проблемы с автоматически помещаемыми точками, разработчики уровня могут вручную разместить Ladders после установки LadderVolume и отключив bAutoPath свойство. Центры точек Ladders должны быть в пределах LadderVolume. LadderVolume должен касаться пола своим дном, и быть высотой по край наверху с прибавкой, по крайней мере, высотой с самого большого NPC, использующего лестницу.

 

VolumePathNode

 

VolumePathNodes полезны для поддержки навигации по объему, например при плавании или при полете. Цилиндрическая коллизия VolumePathNode описывает навигационный объем для полетов. Во время построения пути цилиндрический размер коллизии корректируется от начального радиуса и высоты, определенной разработчиком уровня (свойства StartingRadius и StartingHeight), пока не будет достигнута преграда. Стоит скорректировать позицию актера (ставить приблизительно в центре навигационной области) и задавать цилиндрический размер VolumePathNode для достижения лучших результатов. VolumePathNodes соединится с другими пресекающимися VolumePathNodes, так же как NavigationPoints в пределах их объема. Кроме того, все NavigationPoints, находящиеся непосредственно ниже цилиндра VolumePathNode, будут также тестироваться на связь во время билда пути. Машинные уровни UTGame, такие как VCTF-Sandstorm, используют VolumePathNodes.

 

Cover Links

 

CoverLinks были разработаны для Gears of War. Используются функции:

bCircular = сделает круговое укрытие, то есть укрытие вокруг цилиндра. Обычно делается двумя точками укрытия по обе стороны от цилиндра, по которому можно будет переходить от одной точки в другую.

bClaimAllSlots = если AI входит в укрытие, никакой другой AI, не попытается спрятаться в этом же укрытии.

MaxFireLinkDist = максимальное расстояние, на котором слоты укрытия запросят другие слоты, чтобы создать ссылки стрельбы для AI между ними (говорит AI Gears, в каких местах можно стрелять из этого укрытия).

bCanPopUp = покажет разработчику, если слот допускает вставание актера и стрельбу оттуда.

bAllowPopUp = установите эту функцию, если Вы хотите, чтобы актеры могли вставать и стрелять отсюда.

bAllowMantle = установите эту функцию, если Вы хотите, чтобы актеры могли перелезть через это укрытие.

bAllowCoverslip = установите эту функцию, если Вы хотите, чтобы актеры могли выбежать вперед из этого укрытия (работает только на краях).

bAllowSwatTurn = установите эту функцию, если Вы хотите, чтобы актеры могли выполнить бросок (переход) от этого укрытия к другому укрытию (работает только на краях).

 

Разница между slip и Swat в Gears of War, slip из укрытия означает быстро выбежать вперед из за угла укрытия. Swat быстрый переход с левого укрытия в правое через открытое пространство, такое как дверной проем.

 

UsingWaypoints

 

Система укрытий создавалась для Gears of War и его геймплея, таким образом, она, возможно, не на 100 % применима к Вашему проекту.

 

Изменение размера путей (программирование)

 

Типы путей определяются через код (для случая переходов и летающих узлы, и т.д.) и через свойства по умолчанию Scout (для различных размеров объектов).

 

Чтобы задать различные размеры изменяют массив PathSizes в Вашем классе Scout. Вот примеры значений по умолчанию:

PathSizes(0)=(Desc=Human,Radius=48,Height=80)

PathSizes(1)=(Desc=Common,Radius=72,Height=100)

PathSizes(2)=(Desc=Max,Radius=120,Height=120)

PathSizes(3)=(Desc=Vehicle,Radius=260,Height=120)

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

#1 написал: FACH
22 Февраля 2011 19:31 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
Цитата: raznesy
Как было сказано выше я хотел перевести как можно более качественно(где-то объясняя своими словами), но это мой первый перевод на меня громко не шуметь)). Если начальство даст добро то я переведу (постараюсь более качественно)весь раздел про AI как вы наверно поняли это была лишь небольшая теория, но в переди много еще чего интересного!


Как видишь, raznesy, мой перевод более чем на 95% отличается от твоего. Качество и объяснение своими словами - разные кое-где вещи. Вот мой перевод он более дословный, чем твой, но он намного качественнее, но я много где описал своими словами. У тебя проблема основная в том, что ты не проверял нефига чего писал, что в итоге превратилась в жуткую чушь:

Цитата: для примера
VolumePathNode они полезны для поддержки навигации через тольщину, глубину, обьем. Он использует свойства StartingRadius и StartingHeight, они создают колизию цилиндрицеской формы и задают радиус, высоту ей(т.е вы(игрок) стоите на земле а NPC должен летать для этого используются точки VolumePathNode в свойстав точки прописываете высоту и радиус колизий чтоб NPC не улетел). Настройки свойств очень гибки например можно настроить позицию чтоб колизия начиналась со средней высоты (пойдет для битвы в воздухе). Как вы поняли из точек VolumePathNode создается такая же сеть перещения что и из PathNode, но только в воздухе, еще их можно соединять с navigationPoints и с другими точками. Было также протестировано что можно соединять VolumePathNode c navigationPoints (причем navigationPoints ниже цилиндра колизий VolumePathNode). Вы можете посмотреть использование VolumePathNode в игре от Эпиков под названием: VCTF-Sandstorm.


Так же у тебя куча ошибок орфографических и грамматических. Судя по всему ты человек не начитанный литературой или (и) не знаешь русского языка. Но это поправимо, от части, словарем Word. Конечно развеселила строка:
bAllowPopUp = установив галку вы говорите NPC что бы они были в состоянии (наготове) всать и мочить все что движется


Так что тут все просто, смотри о чем пишешь - проверяй и смотри как описываешь. Так "добро" дать можно, но на вот похожий - качественный перевод.

З.Ы. Это я тебе шепотом на ушко говорю


--------------------
Публикаций: 134 | Комментариев: 778      
#2 написал: Casuss
22 Февраля 2011 20:42 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 5.05.2010
Cover Links! Cover Links! Cover Links!

Вот это интересно хотел бы увидеть тутор по ним.
Публикаций: 0 | Комментариев: 7      
#3 написал: FACH
22 Февраля 2011 20:58 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
А там все просто, в плане настройки, вот только насчет УДК - это еще и скрипты нужны, чтоб их там юзать на всю


--------------------
Публикаций: 134 | Комментариев: 778      
#4 написал: Alex-Strelok
22 Февраля 2011 22:01 | ICQ: 7 |


Группа: Посетители
Регистрация: 4.07.2010
NICE


--------------------
Публикаций: 4 | Комментариев: 22      
#5 написал: kagorta
23 Февраля 2011 19:59 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 15.05.2010
А вот это действительно толковая вещь, ждём продолжения!!!
Ах да, FACH, спасибо!
Публикаций: 0 | Комментариев: 2      
#6 написал: FACH
23 Февраля 2011 20:19 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
Какого продолжения?


--------------------
Публикаций: 134 | Комментариев: 778      
#7 написал: kagorta
23 Февраля 2011 22:39 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 15.05.2010
Эмм... я наверное неправильно понял, думал продолжение переводов будет по данной теме blush smile .
Публикаций: 0 | Комментариев: 2      
#8 написал: FACH
23 Февраля 2011 22:44 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
Там НавМеши и Кровды остались - меня это не интересует


--------------------
Публикаций: 134 | Комментариев: 778      
#9 написал: Casuss
24 Февраля 2011 08:46 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 5.05.2010
Дам Cover Links реально без скриптов не работают, кто знает где их достать?
Публикаций: 0 | Комментариев: 7      
#10 написал: FACH
24 Февраля 2011 14:20 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
на УДН вроде написано


--------------------
Публикаций: 134 | Комментариев: 778      
#11 написал: h2o
4 Марта 2011 23:42 | ICQ: Не Указано |


Группа: Активист
Регистрация: 20.12.2009
Casuss,
ты знаешь что такое поиск? на форумах епиков есть иходники по использованию коверов

Кирилл, а я угадал откуда скрины)
Публикаций: 0 | Комментариев: 2      
Информация
Посетители, находящиеся в группе Гости, не могут оставлять Комментарии в данной новости...






При копировании материалов, активная ссылка на UNREAL-LEVEL.RU обязательна!
© 2008—2012, UNREAL-LEVEL.RU. Все права защищены.