30 августа 2004
Обновлено 17.05.2023

Острова в океане, часть 2. Шлифовка уровня для Far Cry

Острова в океане, часть 2. Шлифовка уровня для Far Cry - изображение обложка

__ Редактор: CryEngine Sandbox Где взять: Устанавливается вместе с игрой Возможности: 100% игровых Сложность освоения: Средняя Документация: На диске с игрой В предыдущей статье мы с вами разобрали создание самой основы уровня — ландшафта и игрового окружения. Несомненно, за истекший месяц вы успели создать карту невероятной красоты, и теперь вам не терпится сделать на ее основе шедевральный уровень с лихо закрученным сюжетом, хитроумными противниками и… ну в общем, еще с чем-нибудь таким, что игроки, забредшие на уровень, будут попеременно оказываться то в крепкой хватке Кондратия, то в цепких когтях Миокарда, а то и вовсе будут попадать под тяжелый удар Холодного Пота. Чтобы сделать эту сказку былью, нужно доработать игровое окружение: оживить его, прописать сюжетные скрипты, научить уму-разуму врагов. Как это делается — читайте в сегодняшней статье. Подробнее об объектах В прошлый раз, создавая игровое окружение, мы ограничились лишь простой расстановкой различных типов объектов на карте, не очень вдаваясь в свойства этих типов. Поэтому сейчас мы изучим их подробнее. Первые два типа, скрывающиеся под кнопками Brush (статическая геометрия) и Entity (объекты, с которыми может взаимодействовать игрок), вам уже известны по прошлой статье. Познакомимся с остальными. AI — раздел, содержащий служебные объекты, управляющие искусственным интеллектом персонажей — их поведением и перемещением. Area — с помощью объектов данного типа вы можете создавать особые зоны уровня: задымленные пространства или зоны, активирующие какие-либо скрипты. Simple Entity — упрощенный вариант Entity. Объекты данного типа не могут быть использованы игроком, но могут обладать базовыми физическими свойствами. В частности, этот тип объектов несложно использовать для создания предметов, использующих физику твердого тела. Archetype Entity —здесь находятся игровые объекты, копирующие заранее заданный прототип и все его свойства. Поначалу этот список пустует — заполнить его нужными объектами вам придется самостоятельно. Это делается в окне базы данных редактора Data Base View. Включите его, выбрав пункт меню

Острова в океане, часть 2. Шлифовка уровня для Far Cry - фото 1

Рис. 1. База данных во всей красе.
Window\Show Data Base View. Окно базы данных содержит пять закладок. Entity Library — библиотека игровых объектов. Через нее можно добавить на карту любой игровой объект (оружие, технику, противника и т.д.), кроме служебных. Prefabs Library — библиотека, куда помещаются предварительно подготовленные группы объектов (например, дом с уже расставленными “обитателями” и интерьером), чтобы затем размещать их в других районах уровня или использовать при создании новой карты. Materials — библиотека материалов (схем текстурирования и освещения геометрии уровня). Материалы используются главным образом при создании закрытых помещений. Particles — библиотека систем частиц. Практически не используется, так как все системы частиц являются игровыми спецэффектами и не требуют отдельного добавления на карту. Music — библиотека игровой музыки. Соответственно, служит для создания музыкального сопровождения на вашем уровне. Сверху также находятся два меню: Library (для действий над библиотеками объектов) и Library Item (для действий над самими объектами). Рассмотрим работу с закладками на примере Entity Library (изображена на рис. 1 ). Остальные закладки устроены по схожему принципу, поэтому, разобравшись с первой закладкой, вы освоите и остальные, когда они понадобятся. Все объекты на закладках разбиты по классам на отдельные библиотеки. Объекты каждой библиотеки отображаются в левой части закладки (обозначено цифрой 1 ) в виде структурированного списка. Но поначалу там ничего нет. Чтобы открыть новую библиотеку, выберите пункт меню Library\Load Library. Все открытые библиотеки помещаются в список библиотек на панели инструментов (в верхней части закладки); чтобы активировать однажды открытую библиотеку, достаточно лишь выбрать ее из этого списка. Когда вы выделите какой-либо конкретный объект библиотеки, справа активируются еще три окна, они обозначены следующими номерами. 2. Список скриптов и методов объекта (не представляет для нас интереса). 3. Окно предварительного просмотра объектов. Также вместо него можно включить окно описания объекта с помощью кнопки Show Item Description на панели инструментов. Чтобы после этого вернуть окно просмотра на место, нажмите кнопку Play. 4. Список параметров выделенного объекта. В редакторе существует огромное число различных типов объектов, каждый из которых имеет собственный набор параметров. Поэтому далее в статье мы будем рассматривать только те параметры, которые нам понадобятся. Разумеется, вы можете не только использовать уже готовые библиотеки, но и изменять их, и создавать новые. Чтобы создать новую библиотеку, просто выберите пункт меню Library\New Library и укажите имя новой библиотеки. Новые объекты добавляются в библиотеку через меню Library Item\New. В появившемся окне выберите из списка желаемый прототип и нажмите OK. В следующем окне поле Group укажите название группы, в которую следует поместить объект. Если группа не существует, она будет создана. Если же вы хотите добавить объект в уже существующую группу, то перед добавлением просто выделите эту группу, чтобы ее имя уже было указано в соответствующем поле. Ниже, в поле Name , укажите имя объекта. Создав новые библиотеки или отредактировав старые, сохраните изменения через меню Library\Save Modified. Все открытые на закладке Entity Library библиотеки будут добавлены в список объектов, скрытый под кнопкой Archetype Entity на закладке Objects в основном окне редактора, поэтому вам необязательно постоянно держать открытым окно базы данных. Запомните: все объекты (и, конечно, заданные им параметры), добавляемые из Archetype Entity , в точности повторяют первоначальный прототип в библиотеке объектов. Изменить параметры этих объектов можно только из окна базы данных, причем при изменении параметров прототипа изменятся и соответствующие параметры его копий на карте. Поэтому в основном объекты из Archetype Entity используются как типовые — типовой “толкабельный” ящик или бочка (не задавать же уникальные физические параметры каждой бочке), типовой монстр (наделять индивидуальными чертами AI каждого мутанта также не стоит), двери на уровнях (уже работающие и не требующие создания отдельных скриптов) и так далее. Доработка экстерьера Поработаем с объектами окружения, не ограничиваясь банальной расстановкой их на карте. Для начала добавим игровому миру интерактивности и физического реализма. Попробуем соединить между собой два разных предмета, например лодку и плот, как в одном из эпизодов игры.

Острова в океане, часть 2. Шлифовка уровня для Far Cry - фото 2

Рис. 2. Лодка с вереницей присоединенных плотов — в окне редактора.
Плот в данном случае — это твердое тело. Заготовкой для него служит объект типа Simple Entitywood_raft (располагается в папке Buildings\Boat ). Добавьте его на карту и расположите так, чтобы он был слегка погружен в воду позади лодки. Чтобы оценить физические качества нового плота, отыщите кнопку AI/Physics , расположенную под окном 3D-обзора. Нажмите. Ничего не произошло? Значит, нужно сначала задать объекту параметры его физической модели. Когда объект выделен, его свойства располагаются на закладке Objects в свитках, расположенных сразу под кнопками добавления объектов. В свитке SimpleEntity вы можете узнать и изменить имя объекта, выбрать цвет условного обозначения данного объекта в окнах 2D-обзора, а также выбрать слой, к которому будет принадлежать выбранный объект. Ниже расположен свиток SimpleEntity Params — здесь настраиваются параметры отображения объекта в игре. Нас они пока не интересуют. Еще ниже расположен свиток SimpleEntity Properties — здесь, в разделе Physics , и находятся нужные нам свойства. Mass — масса объекта. Resting — если параметр включен ( True ), то объект будет находиться в состоянии покоя, пока его не толкнут. Если выключен — просчет физической модели объекта начнется сразу после начала игры. RigidBody — будучи включенным, указывает, что объект является твердым телом. Иначе объект будет просто статической моделью. Обязательно включите этот параметр. RigidBodyActive — включает/выключает просчет физической модели для данного твердого тела. Также должен быть включенным. water_density — плотность воды для данного объекта. Влияет на то, насколько хорошо объект держится на воде — как пробка (при высоких значениях), как топор (при очень низких), как топор из пробки (при средних). water_resistance — сопротивление водной среды. Чем больше значение параметра, тем более “вязкой” вода будет для данного объекта. Затем добавьте лодку (из объектов Entity , папка Vehicles , объект Boat ). Все параметры можно оставить как есть.

Острова в океане, часть 2. Шлифовка уровня для Far Cry - фото 3

Рис. 3. Та же лодка, но в игре. А вот загрузить бы на плоты баллоны с газом…
Теперь привяжем плот к лодке. Для этого нам понадобится объект ChainSwing (тип Entity , папка Others ). Это простая цепь, обладающая соответствующими физическими свойствами. Все, что нам нужно — подогнать длину цепи и присоединить ее к лодке и к плоту. В этом нам помогут параметры из свитка Entity Properties. Model — модель объекта. В случае с цепью вы можете, щелкнув по маленькой кнопочке справа в строке параметра, выбрать модели chain_swing.cgf (стандартная модель средней длины), chain_swing_short.cgf (короткая цепь) или chain_swing_longer.cgf (длинная цепь). Есть также модели кабелей, проводов, веревок, цепей с крюками — полный ассортимент. Выберите модель подходящего типа и длины. AttachTo — параметр указывает, к какому объекту должен быть присоединен нижний конец цепи. Просто скопируйте сюда имя объекта, изображающего плот. AttachToUp — этот параметр указывает, к чему надо присоединить верхний конец цепи. Если строка пуста, то конец “пристегивается” к той точке, в которой вы его разместили (даже в пустоте). Впишите сюда имя лодки. Необходимо понимать, что цепь будет присоединена к указанным объектам именно в тех точках, в которых находятся ее концы. Даже если цепь визуально будет висеть в пустоте, она все равно присоединится к объектам. Поэтому внимательно подходите к размещению всех связывающих объектов и отключайте во время их размещения просчет физики (кнопка AI/Physics ). Если вы хотите, чтобы плот был привязан к лодке двумя цепями (или больше), надо всего лишь скопировать первую цепь клавишами Ctrl+C и указать ей желаемое положение. Все необходимые параметры будут уже настроены. Если вы все сделали правильно, то при включении просчета физики плот и лодка начнут весело качаться на волнах, а соединяющая их цепь провиснет между ними. Чтобы проверить эту связку в игре, расположите камеру обзора прямо над лодкой и нажмите клавиши Ctrl+G — так вы сможете поиграть прямо в редакторе. Подобным образом создаются абсолютно любые “цепные” связки — подвесные мосты, балки, висящие на крючьях мертвяки и все, на что только хватит вашей фантазии. Поработаем немного с Archetype Entity. Раз уж мы занялись интерактивностью уровня, то было бы неплохо добавить на него объектов, симулирующих физику тканей. Это сетки, занавески, флаги, паутина. Располагаются данные объекты в библиотеке Physicalized_Objects , в папке Cloth. Свойства тканей поддаются настройке в окне базы данных. Ниже приведены наиболее интересные параметры.

Острова в океане, часть 2. Шлифовка уровня для Far Cry - фото 4

Рис. 4. Взрывоопасные объекты в действии.
CollideWithPhysical — включить или выключить просчет столкновений с физическими объектами. CollideWithPlayers —просчет столкновений с игроками. CollideWithStatics —просчет столкновений со статическими моделями. CollideWithTerrain —просчет столкновений с земной поверхностью. Accuracy — точность расчета колебаний ткани. air_resistance — сопротивление воздуха, влияющее на скорость затухания колебаний. В разделе Gravity вы также можете настроить ускорение свободного падения по всем координатным осям (в метрах в секунду). Конечно, можно создать объект с физикой тканей и через стандартные Entity , с помощью объекта TestCloth в папке Others , установив желаемую ткань в параметре Model. Но это не очень-то удобный и быстрый путь. В тех же Archetype Entity есть очень полезная библиотека — Doors_and_switches. Здесь собраны двери и всевозможные переключатели. Переключатели пока нас не интересуют, а вот двери очень пригодятся. Могу поспорить, что ваш уровень уже изрядно застроен инфраструктурой. Но все дверные проемы пусты и ничем не прикрыты. В таком случае просто добавьте на карту подходящую дверь из папки Doors. Никаких свойств настраивать не нужно — двери уже работают. Также интересна библиотека Destroyable_Objects — здесь находятся разрушаемые объекты. Если вам не терпится что-нибудь взорвать или разломать, смело добавляйте объекты этой библиотеки на карту.

Острова в океане, часть 2. Шлифовка уровня для Far Cry - фото 5

Рис. 5. Всепобеждающий AI. Солдат ловит рыбу в лесу, не выпуская ружья из рук.
Создание миссии Чтобы сделать уровень для одиночной игры, необходимо предусмотреть еще несколько моментов. Во-первых, нужно грамотно расставить на карте врагов, которые будут не просто стоять на месте и начинать действовать лишь завидев игрока, а изображать бурную активность. Потом положить игроку в инвентарь хоть какую-то экипировку, чтобы он начинал играть не с пустыми руками. Также нужно создать хотя бы элементарные игровые скрипты, управляющие целями миссии и событиями во время игры. Но обо всем по порядку. _AI _ Добавление на карту персонажей, управляемых искусственным интеллектом, не отличается особой сложностью. Все эти персонажи добавляются из Archetype Entity. Обычные солдаты находятся в библиотеке Mercenaries_Library , мутанты — в Mutants_Library , вооруженные штатские — Civilians_Library. Причем солдаты распределены по ролям. Есть командиры (те, что в папке Merc_Leader ), есть разведчики ( Merc_Scout ) и так далее. Если вы создаете целую группу солдат, их эффективность зависит в первую очередь от состава группы: без того же командира они будут просто вооруженной толпой. Для объединения персонажей в группы существует параметр groupid , доступный на закладке Objects при выделении персонажа. Причем, если при создании персонажей вы ставите их на карте близко друг к другу, то, скорее всего, они объединятся в группу автоматически.

Острова в океане, часть 2. Шлифовка уровня для Far Cry - фото 6

Рис. 6. Наемник слоняется между якорями. Делает вид, что работает.
Для мелкого контроля действий персонажей можно использовать параметр Behaviour. В нем задается шаблон поведения — патрулировать, стоять на месте, практиковаться в стрельбе и ряд других. Но, как правило, для работы данного параметра требуются вспомогательные объекты — AIAnchor (находится под кнопкой AI на закладке Objects ) и TagPoint (под одноименной кнопкой на той же закладке Objects ). Например, чтобы заставить персонажа совершать обход территории, создайте несколько AIAnchor , расположив их в желаемых точках обхода, и выберите действие INVESTIGATE_HERE. У персонажа в параметре Behaviour выберите действие Job_Investigate. Затем откройте пункт меню Game\Generate AI Triangulation. После этого несчастный персонаж будет навеки обречен слоняться по отведенной ему территории, пока в его поле зрения не попадет противник. C помощью AIAnchor можно также задавать всевозможные фоновые действия — курение, разговоры и тому подобные. Для этого не требуется изменять параметры персонажей, достаточно лишь расположить рядом с ними сам AIAnchor с соответствующим параметром (для курения это AIANCHOR_SMOKE , для разговоров — AIANCHOR_RAMDOМ_TALK ). На некоторых уровнях может возникнуть необходимость ограничивать зону перемещения персонажей — чтобы, например, они не падали с возвышенностей, не тонули в воде или просто не покидали отведенную им территорию. Для этого используется объект ForbiddenArea (из раздела AI ). Никаких особых настроек не

Острова в океане, часть 2. Шлифовка уровня для Far Cry - фото 7

Рис. 7. Здесь устанавливается снаряжение игрока.
требуется — просто расположите точки при создании объекта так, чтобы они очерчивали запретную зону (не забудьте при этом включить кнопку Follow Terrain на панели инструментов). Затем задайте этой зоне некоторую высоту в параметре Height — если запретная зона распространяется на территорию с различными высотами, то она будет перекрывать лишь те участки, которые соответствуют ее высоте. После этого границы зоны станут как бы невидимыми стенами для персонажей — если они изначально находились вне зоны, то они не смогут войти в нее. Если же персонаж был расположен внутри зоны, то он не сможет выйти из нее. _Инвентарь _ Чтобы заполнить рюкзак игрока снаряжением, откройте пункт меню Mission\Properties и нажмите кнопку Player-Equipment-Pack внизу. Во вновь открывшемся окне нажмите кнопку Add в верхней его части и введите имя создаваемого набора снаряжения. Его имя высветится в списке слева от кнопки. Теперь обратите свой взор на поля в нижней части окна. В поле Available Equipment находится доступное для добавления снаряжение. В поле Used Equipment — снаряжение, добавленное в текущий набор. Переносить снаряжение из одного списка в другой можно кнопками “ < <“ и “ > >“. Оружие — это предметы с приставкой WPN в названии. Предметы с приставкой Item — это снаряжение. Поле Ammunition служит для регулирования количества патронов и метательных снарядов (гранаты, камни и т.д.). “Положив” в рюкзак необходимое снаряжение, закройте окно, нажав OK. Набор снаряжения будет присвоен игроку. Но пока не закрывайте окно Mission Properties , оно понадобится нам при создании скриптов. Скрипты и события

Острова в океане, часть 2. Шлифовка уровня для Far Cry - фото 8

Рис. 8. Скриптовая зона под точкой старта — игроку не миновать задания!
__ Все события в Far Cry управляются скриптовым языком Lua. Язык сам по себе весьма прост и гибок, но поначалу его довольно сложно осваивать. Чтобы создать новый скрипт, щелкните по кнопке Create , введите имя и сохраните его. При этом может возникнуть проблема: путь к скрипту будет указан неправильно. Если так и случилось, щелкните по кнопке Browse и заново откройте свой скрипт. Открыть скрипт для редактирования можно кнопкой Edit (все редактирование происходит в стандартном “Блокноте”). Изменив и сохранив скрипт, вы должны перезагрузить его кнопкой Reload , чтобы изменения вступили в силу. Скрипты работают не сами по себе, они тесно взаимодействуют с объектами — как с игровыми (персонажи, предметы), так и со служебными (скриптовые зоны, например). При создании нового скрипта (как правило, он основан на игровом событии) нужно вписать шаблон функции. Он имеет следующий вид: function Mission:Event_MyEvent() [скриптовые команды] end Вы вольны вписать новую функцию в любом месте скрипта, но только не внутри других функций. Можно поместить ее в самом конце текста. MyEvent — это имя события, активирующего данную функцию. Сначала вы пишете это имя в скрипте, и лишь потом в редакторе появляется метка, соответствующая функции. Слова function и end выполняют роль скобок, внутри которых располагаются команды, исполняемые этой функцией. Самые важные команды, которые можно поместить внутри этих скобок, таковы.

Острова в океане, часть 2. Шлифовка уровня для Far Cry - фото 9

Рис. 9. На лицах граждан решимость, ведь стоит помереть одному — и второго ударит сердечный приступ.
Hud:AddMessage(“текст”, секунды) — выводит на экран текстовое сообщение, вписанное в поле “текст” (обязательно в кавычках) на указанное количество секунд.Hud:PushObjective({}, “текст”) — добавляет новое задание (текст задания вписывается также в поле “текст”) в список заданий. Фигурные скобки не играют особой роли, но должны присутствовать обязательно.Hud:CompleteObjective(“текст”) — помечает задание выполненным, делая серым его текст. Текст в поле должен в точности совпадать с текстом завершаемого задания.Hud:FlashObjectives({}, ““) — просто стирает все задания из списка.Hud:SetRadarObjective(“имя метки”) — устанавливает метку задания на радаре. Меткой служит объект TagPoint (из одноименного раздела). В поле “имя метки” необходимо вписать имя этого объекта. Установка новой метки удаляет предыдущую метку, если она была.Hud:SetRadarObjective(“nil”) — убирает с радара метку, не создавая новой.Game:SendMessage(“StartLevelFade имя_уровня”) — запускает уровень, имя которого указано в параметре. Чтобы понять, как именно все это работает, создадим несложный скрипт. Для начала нужно создать два служебных объекта: Shape (из раздела Area ) и AreaTrigger (из раздела Entity\Trigger ). Затем выделите объект Shape , найдите в нижней части закладки, в поле Target Entities , кнопку Pick. Нажмите эту кнопку, а затем щелкните по объекту AreaTrigger в окне обзора — так вы свяжете эти объекты между собой. Вместе они составляют “выключатель”, запускающий скрипт при входе в обозначенную зону. Теперь внесем изменения в игровой скрипт — откройте его. Впишите следующий текст:

Острова в океане, часть 2. Шлифовка уровня для Far Cry - фото 10

Рис. 10. Фрагмент оригинального уровня. Розовые линии обозначают скриптовые взаимосвязи.
function Mission:Event_start() Hud:AddMessage(“New objective”, 15) Hud:PushObjective({}, “Kill Kenny!”) end __ Скрипт выводит на экран извещение о новом задании и добавляет это задание в список. Но чтобы он выполнился, он должен получить команду от игры. Сохраните скрипт, перезагрузите его, а затем обратитесь к свойствам объекта AreaTrigger. В нижней части закладки Objects , в списке Input/Output Events , выделите событие On Enter. Щелкните по кнопке Mission Handler ниже и выберите единственный пока пункт — start. Это и есть метка скриптовой функции. Работать конструкция будет так: сначала игрок входит в скриптовую зону, огороженную объектом Shape. AreaTrigger , привязанный к этой зоне, получает сообщение — “игрок вошел в зону” — и тут же пересылает его метке start , активируя тем самым скриптовую функцию. А та уже исполняет все предписанные команды. Если вы хотите, чтобы задание появилось в списке сразу после старта уровня, просто расположите скриптовую зону так, чтобы она окружала точку старта игрока. Как вы, наверное, уже поняли, Input/Output Events — это список всех возможных действий данного объекта. Реагировать на события и отправлять связанные с ними сообщения могут не только триггеры, но и многие другие объекты, например персонажи, техника. Причем сообщения могут пересылаться не только меткам скриптов, но и другим объектам, заставляя выполнить те или иные действия. В случае, когда сообщение пересылается от одного объекта другому, вы должны указать, какое именно действие должен выполнить целевой объект. Например, создайте двух персонажей. В списке действий одного из них найдите пункт On OnDeath и выделите его. Щелкните кнопку Pick и выделите второго персонажа — его имя появится под выбранным действием. Щелкните по этой строке правой кнопкой мыши и из появившегося списка выберите Die. Теперь, если первый персонаж погибнет, второй умрет вместе с ним, даже если был абсолютно невредим. Пользуясь этими простыми примерами и комбинируя их, вы можете создавать самые разные игровые события. *** * *** Мы получили вполне презентабельный уровень, обладающий интерактивным окружением, действующими противниками и игровыми скриптами. Но и это еще не все, ведь помимо открытых уровней вы можете строить и традиционные “коридорные”. В их создании есть свои нюансы. Ждите следующей статьи — в ней мы рассмотрим создание закрытых пространств и продолжим совершенствовать уровень.

Комментарии
Чтобы оставить комментарий, Войдите или Зарегистрируйтесь