Как сделать игру вертикально

Добавил пользователь Валентин П.
Обновлено: 19.09.2024

Если вы уверены, что можете ответить на вышеперечисленные вопросы, настало время для создания прототипа. Цель прототипа, убедиться, что ваша идея работает, а эстетика игры (арт, звук и прочее) выбрана верно.

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

На данном шаге ваши рисунки (и звук) могут быть не финального качества. Код также может быть очень неаккуратным. Это не проблема. Важны, только ощущения, которые оставляет игровой опыт. С точки зрения usability, прототип должен быть практически законченным. Он должен доносить вашу идею настолько хорошо, насколько это возможно.

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

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

На этом этапе собирайте как можно больше отзывов!

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

Если вы создаёте игру самостоятельно, в своё свободное время или уже имеете какие-то инвестиции можно пропустить этот шаг. Иначе, — это ключевой этап для получения финансирования на разработку всей игры (или на разработку до Альфа-версии).

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

Например, если в вашей игре 30 уровней (миссий, сцен, локаций и прочее), вы создаёте 2—3 из них. Они должны быть законченными и быть финального качества. Даже ссылки на оставшуюся часть игры должны здесь присутствовать, несмотря на то, что они могут не работать.

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

Почему вертикальный срез так важен для получения инвестиций?

По следующим причинам:

1. Уменьшаются риски для инвесторов.

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

2. Оценка стоимости разработки становится более точной.

Он делает возможной экстраполяцию: если создание 10% игры (масштаб вертикального среза) стоило 20 000$, то вы можете с лёгкостью подсчитать, что финальная стоимость разработки (100% игры) будет в районе 200 000$.

3. Проще переключаться на другие бюджеты.

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

Здесь многие разработчики совершают следующую свою фатальную ошибку. Не добавляйте никакие финальные ресурсы (арт, звук и прочее), пока вы не достигнете альфа-версии. Всегда используйте арт-заменитель. Единственное исключение, если тип игры того требует (например, fighting) — это анимация.

Вся игра, как и всё наполнение, должны разрабатываться с использованием заменителей (то есть грубые скетчи, blocks, CSG и прочее).

Я знаю, что это может очень расстраивать, ведь наблюдать за рождением законченных объектов невероятно отрадно. Однако, нужно противостоять этому искушению.

Для этого, есть много важных причин:

1. Игровой процесс имеет наивысший приоритет.

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

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

2. Альфа-версия хороший повод для получения финансирования.

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

Как результат, риски на этом этапе разработки гораздо ниже. Это упрощает получение хорошей сделки с издателем или инвестором.

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

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

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

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

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

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

Мой опыт издания игр очень противоречивый. Обычно издатели играют со своими проектами, делая на них ставки. Они финансируют множество игр, но действительно инвестируют (в рекламу) только в те, которые хорошо продаются. На оставшиеся игры редко тратятся деньги и их бросают умирать. Таков закон жизни.

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

Поначалу, меня это очень злило, но сейчас я понял, что это самое естественное поведение для издателя. Они не благотворительные организации.

Но не поймите меня неправильно. Работа с издателем имеет большие преимущества. Даже если они не инвестируют деньги в продвижение, они обычно имеют налаженные контакты со СМИ, а многие имеют преданных фанатов (такие как Atlus и Daedalic) которые будут покупать их игры. Также издатели хорошо знают свой целевой рынок, так что, если ваша игра не продаётся, это не означает, что они ничего не делают, если не занимаются её раскруткой.

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

Но мой опыт говорит, что если игра плохо продаётся, шанс, что продажи возрастут с увеличением сумм на продвижение, очень мал.

Касательно движков, вы должно быть слышали, что издатели якобы заставят вас использовать Unity, Unreal или какой-либо другой определённый движок. Это ложь, я опубликовал массу игр на Godot для консолей, мобильных устройств и ПК, и никто никогда не спрашивал меня об их технологиях.

Единственное, когда вы можете это услышать — выполняя контрактную работу по чужой интеллектуальной собственности (такие как Дисней, Лего и прочее). Некоторые из них попросят у вас исходный код для самостоятельного внесения правок, без вашей поддержки. Обсудить этот момент — ваше право.

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

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

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

Но если вы хорошо освоитесь с этим, разработка игры может приносить вам средства на жизнь. Если вы пройдёте цикл Прототип > Вертикальный срез > Альфа > Бета > Золото > Издание достаточное количество раз, думаю шанс стать действительно успешным на самом деле очень высок.


Я один его не вижу?
Есть "Без рамок", есть "Оконный". Где фул скрин, мать твою? Первый раз в жизни с таким сталкиваюсь. Стим.






А "Z" в управлении не напрягает? я должен гадать? xD Была же новость от PG, что у них патч вышел (для прессы) так какого тут его нет


ne4eHer
Ну я на геймпаде. А так, может и напрягло бы. В этой игре очень качественная вибрация для геймпадов, грех играть на клавомыше. Буквально каждый удар кулаком по роже врага ощущается и хочется бить, бить и ещё бить как можно чаще по голове драугров. Рекомендую геймпад короче.



rockpower
играл на плойке с Dualshock 4. сейчас тоже самое - очень нравится вибрация во время ударов как сказали выше. не пробовал DualSense


rockpower
Да. По проводу всё отлично работает. Чуть по лучше, чем через DS4Windows (обычно его юзаю). Задержка минимальная, вибрация лучше чем в эмуляторе, стики тоже ведут себя адекватнее чем в эмуляторе. Хоть где-то нормально геймпад оптимизировали.



Alex Hawk
Я ждал игру на PC потому что на PS4 не смог осилить из-за геймпада) Прошел пару миссий только.








ребятки ! вы ушли от темы . мы (многие) имеем джойстик Дуалшок-2 от SP4, и играем с ним на РС, но вопрос остается актуальным !! как сделать так что бы игра была не в оконном режиме ?




ne4eHer
Prosto pered zapuskom game postavi angl i vce ya tak pishu potomuchto igrau i bouc perekluchati uzk


Alex Hawk
попробуй прописать DisplayMode=Fullscreen , и на файле поставить только для чтенья. Тогда настройка не будет сбиваться .
Полная строчка примерно так должна выглядить
DisplayMode=Fullscreen ; Values: Windowed, Borderless, Fullscreen

Не уверен конечно что поможет) Но попытка не пытка


Алексей Литвинцев
сразу залез в файлы игры как только загрузил . и спойлер это не работает ) почитал форумы оказывается еще в 2018ом году у людей на плойке такие же проблемы были

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



Кадр из игры Mega Man X. Видны границы ячеек и hitbox (зона поражения) игрока.
Примеры игр: Super Mario World, Sonic the Hedgehog, Mega Man, Super Metroid, Contra, Metal Slug, и практически все остальные платформеры 16-битной эпохи.

Как это работает.

Если предположить, что на карте нет наклонных и односторонних платформ, алгоритм несложен :

1. Последовательно разбить на шаги движение по осям X и Y. Если затем вы планируете ввести наклоны, начните разбивку с оси Х, в противном случае порядок не имеет большого значения. Затем, для каждой оси:

2. Найдите координату края, направленного вперёд (ведущего края). Например, при движении влево это координата Х левой стороны ограничивающего прямоугольника, при движении вправо – коорднината Х правой стороны, при движении вверх – координата Y верхней стороны и т. д.

3. Определите, с какими линиями сетки пересекается ограничивающий прямоугольник – так вы получите минимальное и максимальное значение на противоположной оси (т.е. при движении по горизонтали мы найдем номера вертикальных ячеек с которыми пересекаемся). К примеру, если вы двигаетесь налево, игрок пересекает ряды номер 32, 33 и 34 (то есть ячейки с координатами Y = 32 * TS, Y = 33 * TS, и Y = 34 * TS, где TS = размер ячейки).

4. Проследуйте дальше по линии ячеек в направлении движения пока не найдёте ближайшее твердое препятствие. Затем пройдитесь по всем движущимся объектам, и определите ближайшее препятствие среди них на вашем пути.

5. Минимальное из двух значений (расстояние до ближайшего препятствия и расстояние на которое вы собирались продвинуться изначально) и будет значением расстояния на которое мы передвигаем персонажа.

6. Передвиньте игрока на новую позицию. С новой позиции, повторите шаги, и так далее.

Наклоны


Наклоны (ячейки, на которые указывают зелёные стрелки) могут представлять определённую сложность, так как они по сути являются препятствиями, но при этом игрок всё же может частично входить в эти ячейки. Они также предполагают изменение Y координаты персонажа в зависимости от движения по оси X. Во избежание проблем, нужно сделать так, чтобы ячейка содержала параметр “floor y” каждой стороны. Если в системе координат обозначить левую верхнюю ячейку как , как показано на рисунке, тогда точка – это ячейка, расположенная чуть левее от персонажа (первая ячейка наклона); ячейка, на которой он стоит – точка , затем , и . Далее ячейки начинают повторяться, с новой точки и далее, а дальше спуск становится круче и состоит из двух точек и .


Система, которую я сейчас опишу, позволяет вводить произвольные наклоны, хотя, по чисто визуальным причинам, эти два вида наклонов встречаются чаще всего и включают в себя всего 12 ячеек (6, обозначенных выше и их зеркальные отражения). Алгоритм столкновений для горизонтального движения изменяется следующим образом:

Для вертикального движения:

Односторонние платформы


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

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

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

Лестницы (вертикальные)


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

Таким образом, возникает эффект моментального совмещения x-координаты игрока с лестницей. Для движения вниз с верхушки лестницы нужно переместить y-координату персонажа так, чтобы игрок оказался внутри лестницы. В некоторых играх для таких ситуаций вводится альтернативный хитбокс, отслеживающий позицию игрока в пределах лестницы. К примеру, в Mega Man, он представляет собой единичную ячейку, совпадающую с верхней ячейкой спрайта персонажа.

Покинуть лестницу можно следующими способами:

■ Игрок достигает верха лестницы. Здесь обычно включается особая анимация, при которой игрок перемещается на несколько пикселей вверх по оси Y и оказывается над лестницей в стоячем положении;

■ Игрок достигает низа висячей лестницы. В этом случае игрок попросту падает, хотя в некоторых играх это не допускается;

■ Игрок движется влево или вправо. Если нет препятствий, игрок сходит с лестницы в соответствующем направлении;

■ Игрок прыгает. В некоторых играх позволяется отпустить лестницу таким образом.

Будучи на лестнице, действия игрока ограничены движением вверх-вниз, а также иногда возможно атаковать.

Лестницы (наклонные)


Данный тип лестниц встречается редко. В основном, наклонные лестницы присущи играм серии Castlevania. Их реализация во многом совпадает с реализацией обычных лестниц, за некоторыми исключениями:

В иных играх встречаются лестницы, которые ведут себя как склоны – здесь они служат для чисто визуальных целей.

Движущиеся платформы


Для решения этой проблемы существует несколько путей. Рассмотрим такой алгоритм:

■ Перед тем как что либо сдвинуть на карте, задайте условие, при котором игрок считается находящимся на движущейся платформе. Пускай программа следит за тем, чтобы, например, нижний средний пиксель персонажа располагался ровно на один пиксель выше поверхности платформы. Если это условие соблюдается, сохраните указатель на платформу и её позицию в персонаж
■ Сдвиньте все движущиеся платформы на один шаг. Обязательно сделайте это перед тем, как будете двигать персонажей и другие объекты;
■ Для всех персонажей, стоящих на движущейся платформе, определите дельта-положение платформы, т. е. полное перемещение, совершённое ей по каждой оси. Затем, переместите персонажа в соответствии с этим значением;
■Передвигайте персонажей дальше как обычно.

Другие особенности


Есть игры, в которых применены гораздо более сложные и уникальные техники, и особенно в этом плане выделяется серия Sonic the Hedgehog. Эти приёмы выходят за рамки данной статьи, но могут послужить материалом для будущих.


Примеры: Worms, Talbot’s Odyssey

Как это работает

Склоны


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

Приведу в общих чертах алгоритм, изпользуемый в Talbot’s Odyssey:

■ Найдите растояние, на сколько нужно сместиться по каждой оси;
■ Шаги нужно проводить по каждой оси отдельно, начиная с той, на которой наибольшее смещение;
■ Для движения по горизонтали, ограничивающий прямоугольник игрока (AABB) нужно сместить на 3 пикселя вверх(чтобы он смог забираться на склоны);
■ Выполните проверку столкновений, сверяясь со всеми препятствиями и самой битовой маской, и определите, на сколько пикселей персонаж может продвинутся, прежде чем столкнуться с чем-либо. Передвиньте его на эту новую позицию;
■ Если движение шло по горизонтали, передвиньтесь вверх на столько пикселей сколько необходимо (обычно, не больше 3-х) чтобы компенсировать склон;
■ Если в конце движения хотя бы один пиксель игрока накладывается на препятствие, отмените движение по этой оси;
■ Независимо от исполнения предыдущего условия, примените алгоритм для второй оси.

В этой системе не проводится различий между движением вниз в результате спуска и в результате падения, поэтому вам может потребоваться счётчик кадров. Он определяет, сколько кадров должно пройти с момента последнего касания игроком поверхности пола, чтобы персонаж смог прыгнуть или сменить анимацию. В Talbot это значение равно 10-ти кадрам.

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



Braid (редактор уровней) с видимыми слоями (наверху) и …полигонами (внизу)

Как это работает
Есть два основных способа этого достигнуть:
1. Движение и столкновения реализуйте способом похожим на битовую маску, но используя при этом многоугольники, чтобы вычислять отклонения и получать правильный наклон.
2. Используйте физический движок (например, Box2D)
Очевидно, второй способ более распространенный (хотя я подозреваю, что Braid первый), потому что он проще и позволяет делать различные вещи с динамикой в игре.
К сожалению, приходится быть очень внимательным, когда идешь этим путем, чтобы не превратить игру в обычный физический платформер.

Составные объекты

Этот подход имеет свои проблемы. Иногда бывает трудно определить, стоит игрок на полу (из-за ошибок округления), ударяется о стену или скользит вниз по крутому склону. При использовании физического движка трение может стать проблемой, если захотите усилить его у ног и ослабить по бокам.

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

Ускорение


Super Mario World (низкое ускорение), Super Metroid (среднее ускорение), Mega Men 7 (высокое ускорение)

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

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

Как это работает

Реализация ускорения на деле очень проста, но существует несколько подводных камней , о которых следует помнить.

Два вида ускорения:
Среднее взвешенное : число (“a”) от 0 (без движения) до 1 (мгновенное ускорение).
Используйте это значение для вставки между заданной и текущей скоростью, а результат установите как заданную скорость.

vector2f curSpeed = a * targetSpeed + (1-a) * curSpeed;
if (fabs(curSpeed.x)

Добавочное ускорение: Мы определим, в каком направлении добавить ускорение (используя функцию sign, которая возвращает 1 если аргумент больше нуля и -1 если меньше), затем проверим, не вышли ли мы за рамки.

vector2f direction = vector2f(sign(targetSpeed.x – curSpeed.x), sign(targetSpeed.y – curSpeed.y));
curSpeed += acceleration * direction;
if (sign(targetSpeed.x – curSpeed.x) != direction.x)
curSpeed.x = targetSpeed.x;
if (sign(targetSpeed.y – curSpeed.y) != direction.y)
curSpeed.y = targetSpeed.y;

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

Когда персонаж натыкается на препятствие, лучше всего снизить его скорость до нуля.

Контроль прыжков

Существуют четыре основных способа управления прыжками:

Анимация и управление


Black Thorne, анимация персонажа замедляется перед выстрелом назад (кнопка Y)

Во многих играх анимация вашего персонажа будет проигрываться до реального выполнения требуемого действия, во всяком случае, в играх, основанных на резких движениях. Это разочарует игроков, поэтому НЕ ДЕЛАЙТЕ ЭТОГО! Вам следует ставить на первое место анимацию, когда речь идет о прыжках и беге, но если вам не все равно, ограничьтесь такой анимацией, чтобы само действие происходило независимо от анимации.

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

· Используйте числа с плавающей запятой (тип float) для всех расчетов и хранения данных положения, и подводите итог в целых числах всякий раз, когда вы визуализируете изображение или рассчитываете коллизии. Быстро и просто, но при удалении от (0,0) начинает теряться точность. Это, вероятно, не имеет значения, если у вас очень большое игровое поле, но об этом следует помнить. В противном случае используется тип double.

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

Автор: Артём Клиновицкий. По диплому — специалист по защите информации, но в основном занимался AR, VR и интерактивными инсталляциями в разных странах мира. В Pixonic пришёл на должность ведущего VR-разработчика, а сейчас — Senior R&D Software Engineer. Работает над прототипами и другими экспериментальными проектами компании.

Вот мы и добрались до темы, которую наверняка ждали многие, — как сделать трёхмерную игру. В головах некоторых начинающих разработчиков при этом возникает картина шикарной RPG с открытым миром, полной свободой действий и грабежами корованов. Но попытка на чистом энтузиазме взяться за реализацию масштабного проекта часто приводит к разочарованию. Лишь спустя десяток-другой собранных прототипов приходит понимание, какой объём работы нужен для разработки каждого элемента игры.

Потом разработчик начинает выбрасывать из игры своей мечты всё больше деталей, чтобы закончить хоть что-то. Задуманная ролевая игра постепенно превращается в инди-хоррор, открытый мир сменяется коридорами, а механики сводятся к неторопливому сбору записок под скримеры.

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

Минутка истории. Многие в качестве примеров первых 3D-игр обычно вспоминают Doom или Wolfenstein 3D, но настоящим прародителем трёхмерных шутеров (ещё и с мультиплеером) была игра, выпущенная в стенах NASA в 1973 году — называлась она Maze War.

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

Рекомендую начинать с Unity: его не так сложно освоить, у него очень активное комьюнити и есть много готовых компонентов. На ближайшие несколько лет возможностей движка вам точно хватит.

Если вкратце, все 3D-движки создают изображение по одному сценарию.

  1. Модели и виртуальная камера располагаются в трёхмерном пространстве, с учетом положения, вращения и масштаба. К анимированным моделям применяются соответствующая анимации, например, изгибается часть модели, которая привязана к суставу скелета.
  2. Все модели покрываются текстурами. Одни текстуры сообщают о цвете определенных частей модели, другие — о том, насколько сильно эти части отражают свет, третьи содержат информацию о рельефе поверхности и так далее. По сути, текстуры — это обычные картинки. За то, как именно они будут накладываться и отображаться отвечают шейдеры — своего рода инструкции для видеокарты.
  3. Рассчитывается освещение с учётом источников света, расположения моделей относительно друг друга, заранее подготовленных световых карт (специальных текстур, содержащих информацию об освещённости 3D-моделей).
  4. Применяются пост-эффекты для финальной обработки картинки. Например, стилизация под нуар или эффект миниатюры.

Сами модели для игр создаются в отдельных редакторах вроде 3ds Max или Maya. Ещё есть бесплатный Blender с кучей туториалов на YouTube. Как именно это делается — слишком большая тема для нашего цикла, тем более, что в прототипах можно обойтись готовыми моделями из онлайн-библиотек и каталогов самих игровых движков.

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

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

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

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

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

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

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

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

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

Следовать туториалам несложно, но я очень советую избегать слепого копирования. Экспериментируйте: что будет, если задать другое значение параметра в скрипте; а если сделать совсем другую форму коллайдера; и так далее.

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

Главное — выйти за рамки простого повторения. Только тогда можно по-настоящему усвоить материал и приобрести устойчивые навыки.

Движок Unity со всем необходимым можно получить совершенно бесплатно. Более того, сделанные в нём игры можно официально публиковать и продавать, пока они не начнут приносить прибыль больше $100 тысяч в год. Функции бесплатной версии фактически не ограничены — разве что придётся мириться с логотипом Unity на старте игры и светлой темой интерфейса редактора.

Советую сразу скачивать последнюю версию, несмотря на то, что большинство уроков сделаны до её выхода. Большая часть действий почти не будут отличаться, а если где-то возникнут расхождения, тем лучше — самостоятельно найдите, как выполнить в новой версии то, что описано в уроке. Так обучение будет намного эффективнее.

Важное исключение: если урок затрагивает создание интерфейса игры (UI) и он предназначен для Unity версии 4.5 или раньше — он устарел целиком и полностью. Потому что в версии 4.6 UI был полностью переработан — изучать устаревшую версию не имеет смысла.

Ещё в комплекте с Unity поставляется бесплатная некоммерческая версия редактора кода Visual Studio. Советую сразу его установить и привыкать работать в профессиональной среде.

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

    начального уровня от Unity по созданию адвенчуры про Элен, которая потерпела крушение на неизвестной планете. Весь урок можно выполнить без написания и строчки кода, на основе бесплатного 3D Game Kit. А после него можно изучить и весь раздел Tutorials на сайте Unity — там много полезных уроков. , официально рекомендуемый Unity. Он охватывает множество аспектов этого движка: программирование, физика, шейдеры, искусственный интеллект, звуки, частицы и так далее. Курс рассчитан примерно на 50 часов, и на него иногда действуют большие скидки. от YouTube-канала Brackeys по созданию игры в жанре Survival. Инди-игры в этом жанре довольно популярны, и многие наверняка хотели бы сделать что-то подобное. Этот туториал поможет начать. с отдельными роликами от того же автора. В нём могут быть уроки, которые пригодятся именно вам. от разработчиков Unity. Я советую первые две: прототипирование на UFPS и работа с Playmaker. от N3K по созданию мобильного раннера, по сути — клона Subway Surfer, но про пингвинов. Однозначно стоит взглянуть всем, кто интересуется разработкой мобильных игр. по созданию профессионально выглядящей лесной сцены в Unity из готовых ассетов (ссылки на них есть в описании к роликам). Подойдет тем, кто хочет самостоятельно собрать крутой уровень, не хуже, чем в коммерческих проектах.

Кто-то мечтает сделать классический ПК-шутер, кто-то мобильный раннер, кто-то возродить жанр стратегий в реальном времени. Поэтому задание будет общим.

  • Выберите серию уроков, которая лучше всего вам подходит, — из списка выше или самостоятельно.
  • Скачайте и установите Unity или любой другой движок. Начните следовать выбранным урокам, повторяя за автором. Но не забывайте экспериментировать, чтобы понять, как всё устроено.
  • Закончив туториал или курс, попробуйте самостоятельно улучшить результат. Добавьте то, без чего прототип игры в выбранном жанре будет неполным. Это не обязательно должно быть чем-то сложным, главное — выйти за рамки обучающих материалов.

В следующий раз мы немного отойдем от Unity и более подробно разберем создание логики для прототипа без навыков программирования. Для этого мы используем Blueprints, о которых мы уже говорили, и которые входят в базовый комплект движка Unreal Engine.

Читайте также: