Давным-давно я имел радость поиграть в замечательную RTS под названием «Периметр: Воины Геометрии» от отечественного разработчика K-D Labs. Это игра о том, как огромные летающие города под названием «Рамки» бродят по просторам «Губки» — цепочки взаимосвязанных миров.
Сюжет довольно странный и абстрактный, но гораздо более интересной и новаторской частью игры были ее технические особенности, а не сюжет. В отличие от большинства RTS, где сражения происходят на статичной местности, в Perimeter одной из ключевых игровых механик было терраформирование.
У игрока были средства манипулирования ландшафтом, чтобы возводить на нем свои постройки, а также целый арсенал боевых единиц, способных превратить этот ландшафт в потрескавшийся, плавающий и извергающий ужас раскалённых камней/гадких насекомых.
Как известно, мир RTS в настоящее время переживает некоторый упадок.
Инди-разработчики слишком заняты созданием ретро-платформеров и ружжеподобных игр умопомрачительной сложности, и поэтому, переиграв некоторое время назад «Периметр», я решил, что надо попробовать реализовать что-то подобное самому — идея была интересная и с технической, и с геймплейной стороны.
точки зрения.
Имея некоторый практический опыт разработки игр (ранее я пытался кое-что сделать с помощью XNA), я подумал, что для достижения успеха самостоятельно мне придется использовать что-то более высокоуровневое и простое.
Мой выбор пал на Unity 3D, пятая версия которого только что вышла.
Вооруженный огромным энтузиазмом, вдохновением от только что завершенного проекта «Периметр» и серией просмотренных видеоуроков по Unity, я начал делать наброски и знакомиться с инструментами, которые мне предлагал редактор Unity.
Что предлагает сообщество?
Как всегда, первый блин у меня вышел комом.Недолго думая, я начал реализовывать ландшафт, используя плоскость и код, который поднимал или опускал вершины этой плоскости.
Многие читатели, хоть немного знакомые с Unity, могут возразить: «Но в Unity есть компонент Terrain, созданный специально для этой цели!» - и они будут правы.
Проблема только в том, что я, слишком увлекшись реализацией своей идеи, забыл об одной важной вещи: RTFM! Если бы я чуть внимательнее изучил документацию и форумы, то не стал бы решать проблему таким откровенно глупым способом, а сразу использовал бы готовый компонент. После двух дней бесполезного пота и алгоритмов (Самолет явно не предназначался для использования в таких целях) я наконец-то приступил к созданию ландшафта с помощью Terrain. Надо сказать, что среди некоторых членов сообщества Unity возникла идея создать динамичный ландшафт для своей игры.
Некоторые люди задавали вопросы на форумах и получали ответы.
Им было рекомендовано использовать метод SetHeights, который принимает на вход кусок карты высот, нормализованный от 0f до 1f, который будет установлен начиная с точки (xBase;yBase) на выбранном ландшафте.
Довольный результатами своих поисков, я приступил к разработке.
Первый рабочий прототип был готов через пару часов и включал в себя простой движок камеры (с помощью правой клавиши), простой генератор кратеров и фактическое добавление этих кратеров в ландшафт нажатием левой клавиши (можно взять билд и видеть Здесь ).
Сама деформирующая часть была до неприличия простой.
Это был скрипт примерно следующего содержания
Теги: #разработка игр #Unity 3D #rts #разработка игр #unityvoid ApplyAt(DeformationData data) { currentHeights = data.terrainData.GetHeights(data.X - data.W/2, data.Y - data.H/2, W, H);
-
О Том, На Какие Кочки Я Наехал. Часть Вторая
19 Oct, 24 -
Введение В Seneca.js
19 Oct, 24 -
Nvidia Раскрывает Подробности О Чипе Tegra
19 Oct, 24