Как сделать игру урок
🏓 Создаем 2D-игру на Unity: инструкция для новичка
Двумерные игры сравнительно просты: для них не требуется сложных 3D-моделей, программный код по сравнению с 3D-проектами выглядит понятнее. Такие игры популярны как на десктопах, так и на мобильных устройствах. Unity также позволяет разрабатывать игры и для браузеров.
За последние годы вышло много популярных двумерных игр:
Программная реализация 2D-игр проще не только из-за отсутствия третьего измерения: на самой сцене меньше объектов, вместо трехмерных моделей плоские спрайты, вместо скелетной анимации – покадровая. А еще 2D-игры проще портировать на другие платформы – легче найти новую аудиторию.
Особенности создания 2D-игр на Unity
Предварительно рассмотрим основные понятия Unity, без понимания которых будет проблематично создать игру:
Пошаговый процесс создания 2D-игры на Unity
Предполагаем, что вы уже установили редактор и создали аккаунт на портале Unity.
В первую очередь создадим новый проект и откроем его настройки (Edit → Project Settings). Во вкладке Editor установим параметр Default Behaviour Mode в значение 2D
Настройка проекта
Детальная настройка проекта
Следующим шагом сохраним текущую активную сцену, назвав ее, например, Scene1. Теперь создадим основные игровые объекты: ракетку, мяч и менеджер игры, в котором будет храниться основная логика игры.
1. Создаем пустой объект, переименовываем в GameManager.
Создаем пустой объект
2. Создаем C#-скрипт с названием GameManager. Ассоциируем скрипт с объектом GameManager, перетащив мышкой скрипт на объект.
Создаем C# скрипт
3. Создаем квадратный спрайт, называем его Pad (Assets → Create → Sprites → Square). Аналогично создаем круглый спрайт Ball (Assets → Create → Sprites → Circle). Масштабируем спрайт Pad со следующими параметрами – x:0.5, y:2.5, z:1.
Создаем спрайты
4. Создаем префабы для Pad и Ball, после чего добавляем к ним компонент Box Collider 2D (включаем параметр Is Trigger) и компонент Rigidbody 2D (выставляем параметр Body Type в значение Kinematic).
5. Создаем C#-скрипты Ball и Pad. Ассоциируем их с префабами.
6. Заполняем скрипты следующим кодом.
GameManager.cs Ball.cs Pad.cs
6. Добавляем к префабу Ball и Pad теги с аналогичными именами. Выделив префабы, в инспекторе мы можем видеть выпадающий список тегов. Там же расположены и кнопки для добавления и редактирования тегов.
7. В настройках камеры выставляем параметр Projection в значение Orthographic, а параметр Clear Flag – в значение Solid Color.
Настройка камеры
8. Настраиваем кнопки, как показано на следующих скриншотах (Edit → Project Settings → Input Manager).
Настройка ввода, основное
Настройка ввода, первый игрок
Настройка ввода, второй игрок
Вот и всё, игра готова!
Пинг-понг, итоговый результат
Билд для платформы Windows
Дополнительные туториалы
1. Официальный туториал от Unity, где детально рассмотрен процесс создания roguelike RPG.
3. Youtube-канал N3K EN содержит множество уроков как по отдельным компонентам Unity, так и полноценные серии уроков по созданию игр с нуля.
В числе прочего вы разработаете 2D-платформер с физическими загадками и динамическим освещением, научитесь портировать его на мобильные устройства. Кроме того, разработаете полноценную браузерную стратегию, а также игру в жанре двухмерных гонок.
По окончании обучения вы будете иметь портфолио из 4 игр, которое можно показать на собеседовании. Если же какая-то часть материала будет непонятна, вы всегда можете обратиться к персональному преподавателю.
Учимся делать 3D-игры с нуля
Курсы и туториалы по созданию трёхмерных игр — третья статья из цикла «Разработка».
Автор: Артём Клиновицкий. По диплому — специалист по защите информации, но в основном занимался AR, VR и интерактивными инсталляциями в разных странах мира. В Pixonic пришёл на должность ведущего VR-разработчика, а сейчас — Senior R&D Software Engineer. Работает над прототипами и другими экспериментальными проектами компании.
Вот мы и добрались до темы, которую наверняка ждали многие, — как сделать трёхмерную игру. В головах некоторых начинающих разработчиков при этом возникает картина шикарной RPG с открытым миром, полной свободой действий и грабежами корованов. Но попытка на чистом энтузиазме взяться за реализацию масштабного проекта часто приводит к разочарованию. Лишь спустя десяток-другой собранных прототипов приходит понимание, какой объём работы нужен для разработки каждого элемента игры.
Потом разработчик начинает выбрасывать из игры своей мечты всё больше деталей, чтобы закончить хоть что-то. Задуманная ролевая игра постепенно превращается в инди-хоррор, открытый мир сменяется коридорами, а механики сводятся к неторопливому сбору записок под скримеры.
Поэтому лучше начинать с малого и постепенно добавлять в игру новые возможности. Тогда полученный в процессе опыт окажется намного ценнее, а следующая попытка гарантированно будет лучше.
Минутка истории. Многие в качестве примеров первых 3D-игр обычно вспоминают Doom или Wolfenstein 3D, но настоящим прародителем трёхмерных шутеров (ещё и с мультиплеером) была игра, выпущенная в стенах NASA в 1973 году — называлась она Maze War.
В те времена не было движков, программисты с большим трудом добивались лицензий и исходников какой-то существующей игры, чтобы её доработать, или же просто писали всё с нуля. На это уходила львиная доля времени разработки самой игры. Сегодня всё намного проще — можно спокойно выбрать один из популярных движков.
Рекомендую начинать с Unity: его не так сложно освоить, у него очень активное комьюнити и есть много готовых компонентов. На ближайшие несколько лет возможностей движка вам точно хватит.
Если вкратце, все 3D-движки создают изображение по одному сценарию.
Сами модели для игр создаются в отдельных редакторах вроде 3ds Max или Maya. Ещё есть бесплатный Blender с кучей туториалов на YouTube. Как именно это делается — слишком большая тема для нашего цикла, тем более, что в прототипах можно обойтись готовыми моделями из онлайн-библиотек и каталогов самих игровых движков.
Всё, что требуется от начинающего разработчика в этой части — понять общие принципы работы с моделями, отбора их для прототипа и грамотного размещения на сцене.
Как уже говорили в прошлой статье, для создания прототипа добавлять какую-либо озвучку в принципе не обязательно. Можно сделать целую игру, обкатать геймплей, настроить всю графику и только в конце добавить озвучку. Но важно ведь ещё и не потерять интереса к процессу.
В этом разделе речь пойдёт о том, что делает статичный набор моделей, картинок и звуков собственно игрой.
Вам будет проще, если вы уже владеете программированием на одном из высокоуровневых языков. В целом, написание кода для игр происходит по тем же фундаментальным принципам, с использованием тех же паттернов и моделей проектирования. Программирование всё равно придётся изучать — рано или поздно.
Но кому хочется корпеть над учебниками по кодингу вместо того, чтобы делать игры. Тут есть два пути.
Первый: освоить самые азы, повторяя за туториалами (разницу между туториалами и курсами мы разобрали в прошлой статье цикла). Делая это, можно узнать, как писать код для самых базовых вещей, понять синтаксис языка и то, как код управляет происходящим в игре. Постепенно вы сможете делать аналогичные вещи самостоятельно, а затем выучите новые операторы, которые расширят ваши возможности.
Второй: воспользоваться средствами визуального или «нодового» программирования. Например, для Unity нужно будет установить специальный плагин (самый известный — Playmaker). С его помощью можно «собрать» логику игры из логических блоков, соединяя их линиями, как в блок-схеме. У Unreal Engine аналогичный инструмент встроен в базовую версию и называется Blueprints.
Конечно, сделать действительно сложную логику с помощью только этих инструментов будет крайне трудно, а поддерживать и отлаживать — ещё труднее. Но для новичков они сильно снизят порог входа в геймдев.
Возможно, для первого раза лучше отложить собственные идеи для игр и выбрать один из готовых проектов, для которого есть хорошие туториалы. Так вы сможете шаг за шагом изучить интерфейс и возможности игрового движка и его редактора, понять основы построения игр. А также более трезво оцените свои собственные силы.
Следовать туториалам несложно, но я очень советую избегать слепого копирования. Экспериментируйте: что будет, если задать другое значение параметра в скрипте; а если сделать совсем другую форму коллайдера; и так далее.
Закончив урок, добавьте к проекту что-нибудь своё: новую возможность для персонажа, красивый уровень из найденных ассетов, озвучку или другой вариант управления.
Главное — выйти за рамки простого повторения. Только тогда можно по-настоящему усвоить материал и приобрести устойчивые навыки.
Советую сразу скачивать последнюю версию, несмотря на то, что большинство уроков сделаны до её выхода. Большая часть действий почти не будут отличаться, а если где-то возникнут расхождения, тем лучше — самостоятельно найдите, как выполнить в новой версии то, что описано в уроке. Так обучение будет намного эффективнее.
Важное исключение: если урок затрагивает создание интерфейса игры (UI) и он предназначен для Unity версии 4.5 или раньше — он устарел целиком и полностью. Потому что в версии 4.6 UI был полностью переработан — изучать устаревшую версию не имеет смысла.
Ещё в комплекте с Unity поставляется бесплатная некоммерческая версия редактора кода Visual Studio. Советую сразу его установить и привыкать работать в профессиональной среде.
Теперь к конкретным урокам, которые могут пригодиться для создания первого прототипа. Заодно можно на практике увидеть, как работают люди с большим опытом создания игр.
Кто-то мечтает сделать классический ПК-шутер, кто-то мобильный раннер, кто-то возродить жанр стратегий в реальном времени. Поэтому задание будет общим.
В следующий раз мы немного отойдем от Unity и более подробно разберем создание логики для прототипа без навыков программирования. Для этого мы используем Blueprints, о которых мы уже говорили, и которые входят в базовый комплект движка Unreal Engine.
Как создать игру, ничего не умея. Часть первая: модели и анимации
Привет, меня зовут Павел, и я разработчик игр. На идею рассказать о разработке игр людьми, которые ничего не умеют, но горят желанием, меня натолкнул мой брат.
— Я придумал игру, создай мне её.
— А почему ты сам её не создашь?
— Я не умею.
И я задумался, а так ли сложно что-то создать с нынешним количеством уроков и тем по созданию игр в интернете?
С чего начать?
Для начала нам нужна идея, что за игру мы будем создавать, благо у меня была идея брата. Рассмотрим её поближе.
Думаю, что данный план вполне подойдёт для создания шедевра ААА класса =).
Начнём создавать шедевр
В первую очередь регистрируемся на сайте Unity, скачиваем и устанавливаем движок последней версии. Далее перевоплощаемся в человека, который совершенно ничего не знает о движке и о создании игр.
Идём в интернет и спрашиваем «как нам начать использовать Unity?».
Запускаем Unity Hub.
Выбираем NEW и далее 3D проект, пишем название и местоположение проекта.
И открывается сама программа.
И тут, наверное, знатоки начнут кидаться картошкой со словами «Зачем столько воды? Все и так это знают» НО! Материал предназначен в первую очередь для тех, кто ничего не умеет, а не для гуру геймдева =).
Дальше снова идём в интернет либо проходим туториал в самой программе, чтобы научиться основам работы с движком. Для того, чтобы воспользоваться туториалом в программе, нужно в окне Unity Hub нажать на строчку Learn и выбрать любой из проектов. Я советую пройти все уроки и посмотреть несколько роликов по созданию игр.
Как создать модели для игры?
Я выбрал второй вариант. Отправляемся в AssetStore. Если у вас не активировалась ваша учетная запись, повторно входим в личный кабинет. И начинаем искать подходящие паки. Я нашел то, что нужно, примерно за 3 минуты по поиску knight. В паке, помимо моделей самих персонажей, были модели окружения. Купил за 10 долларов, нажал Import, поставил все галочки, и пропала проблема, неумения моделировать. 1/4 игры готово.
Сцена
Дальше начинается самое нудное. Нужно собрать рабочую зону (scene, сцену, кому как привычнее называть).
Я привык сначала прописывать персонажей, анимацию, и прочую ненужную (очень нужную) ерунду в начале работы, а уже после того как основные механики готовы, я собираю уровень (локацию, игровую зону). Для начала давайте в сцену поставим кусок земли, на которой будет стоять наш персонаж, и начнём работать с анимацией.
Далее добавляем персонажа (рыцаря, демона, ниндзю, тяночку, или кто вам больше по душе). Персонажа берем из папки Prefabs: мы уже знаем (вспоминаем, чему нас научили во вкладке Learn), что туда сохраняют полностью готовые объекты, персонажей и так далее.
И вот он, наш герой, который будет покорять всех и вся.
Анимация
Помните в рейде «Цитадель Ночи» в World of Warcraft был босс Алуриэль? Когда она произносила заклинания, то кричала «Аннигиляция, репликация, детонация, АНИМАЦИЯ. ». Нам необходимо с криком «Анимация!» наброситься на интернет и понять, как её сделать.
Изучаю кучу материала по созданию анимации, и…, либо я дурак, либо лыжи забыл. Реально перелопатил полтора часа материала, но так ничего более-менее подходящего не нашел. Поэтому я решил объединить несколько уроков в один и собрать простой способ анимации.
Что нужно в первую очередь? По мне — так научиться ходить и бегать. Возьмём анимацию ходьбы и бега.
Теперь создаём папку Animation в Unity и добавляем туда нашу анимацию. Начинаем настройку.
Вот мы и победили нашу анимацию! УРА! Теперь нам нужно подключить её к нашему персонажу. Вперед, к финишной прямой!
Выбираем персонажа, inspector, окно Animator, и в строке Controller нажимаем на кругляшок. Появится выбор, где мы и увидим нашу Animation, выбираем её и нажимаем на кнопку Play в Unity. Если вы всё сделали правильно, то сейчас должны наблюдать как ваш персонаж стоит, и у него проигрывается анимация Idle. То есть, он стоит и немного покачивается.
С анимацией разобрались, пора включать снова человека, который ничего не умеет =)
Скрипт W A S D
Анимация у нас есть, теперь нужно заставить нашего персонажа двигаться. Покопавшись в интернете, я узнал, что можно просто добавить компонент Character Controller. Так и сделаем — тыкнем Add Component, в поиск вбиваем Character Controller и добавляем его, в строке Center выставляем Y=1 (нужно, чтобы «яйцо» покрывало всего персонажа. Если у вас получилось меньше или больше, то просто настройте его вручную).
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Move: MonoBehaviour
<
public float speed = 3.0F;
public float rotateSpeed = 3.0F;
void Update()
<
float horizontal = Input.GetAxis(«Horizontal»);
float vertical = Input.GetAxis(«Vertical»);
CharacterController controller = GetComponent ();
transform.Rotate(0, horizontal * rotateSpeed, 0);
Vector3 forward = transform.TransformDirection(Vector3.forward);
float curSpeed = speed * vertical;
controller.SimpleMove(forward * curSpeed);
Тут я немного поясню скрипт.
Верхние четыре строчки — это подключение библиотек, public class — название скрипта. Если у Вас скрипт называется Moving или что-то в этом роде, то поменяйте название. Учтите, к регистру скрипт тоже придирчив.
public float speed = 3.0F; public float rotateSpeed = 3.0F; — это скорость персонажа, настраивается по желанию. Далее идёт подключение управления Character Controller и, соответственно, анимации.
Перетаскиваем скрипт в Inspector персонажа и проверяем. It’s ALIVE.
Но есть нюанс: поворачивается наш персонаж слишком быстро и не подключена анимация бега. Скорость поворота лечится просто — выставляем в строке Rotate Speed 0.5, и наш персонаж больше не использует чит-крутилку из CS GO. Теперь сделаем, чтобы наш персонаж все-таки побежал. Снова интернет, хотя, по мне, тут можно и логически додумать, как всё провернуть, но всё же я нашел строчку кода, чтобы всё заработало. Добавляем в наш код такую строчку
Если у Вас возникли вопросы, что такое Fire3, то ответ прост: это LShift, а проверить это можно, зайдя File->Build Setting->Player Setting->Input Manager. Эту информацию также не составило труда найти в интернете.
После проверки наш персонаж при нажатии клавиши LShift сменил свою анимацию на бег, но при этом его скорость никак не изменилась. Снова уже по протоптанной дорожке идём сами знаете куда, и я снова нашел строчку кода, которая мне подошла и оказалась полностью рабочей.
В итоге весь скрипт у нас получился такого вида
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Move: MonoBehaviour
<
public float speed = 3.0F;
public float rotateSpeed = 3.0F;
void Update()
<
float horizontal = Input.GetAxis(«Horizontal»);
float vertical = Input.GetAxis(«Vertical»);
CharacterController controller = GetComponent ();
transform.Rotate(0, horizontal * rotateSpeed, 0);
Vector3 forward = transform.TransformDirection(Vector3.forward);
float curSpeed = speed * vertical;
controller.SimpleMove(forward * curSpeed);
if (Input.GetKey(KeyCode.LeftShift))
<
speed = 6.0f;
>
else
<
speed = 3.0f;
>
Всё проверили, всё работает, осталось только прикрепить камеру к персонажу. Без заморочек просто перетаскиваем Main Camera в нашего персонажа, далее её настраиваем как нам удобно, проверяем и празднуем ПОБЕДУ!
Заключение
Я считаю, что не имея никаких знаний и денег, а только немного терпения, можно самому создать свою игру. Если вас смущает покупка пака из Asset Store, то всегда можно найти бесплатные паки. Я порылся в интернете и нашел как минимум 6 ресурсов, которые их предоставляют. Советую помимо интернета начать изучение какого-либо направления гейм дева.
Все описанное в этой статье было собрано без специальных знаний с помощью интернета.