Привет, Хаброжители!
Узнайте, как придумать и создать свою первую игру. Загляните за кулисы гейм-дизайна и глубоко погрузитесь в теорию и техническую сторону разработки видеоигр.
Книга затрагивает теорию гейм-дизайна, практические особенности реализации игр в различных жанрах, их внутренние механизмы и самые успешные проекты в конкурентном игровом мире. Майкл Киллик, получивший премию BAFTA за наставничество молодых дизайнеров видеоигр, познакомит вас с техническими аспектами разработки игр и поделится приемами, которые помогут сделать первые шаги на пути создания собственных проектов. Вы поймете особенности игровой индустрии и будете разбираться во всех этапах создания игрового продукта, от идеи до разработки и выпуска игры.
В этой главе мы создадим на Unity основу для 2D-платформера, которую в дальнейшем вы сможете использовать для разработки своей первой игры. Для настройки проекта вам нужно будет проделать все то же самое, что мы уже делали ранее, настраивая проект 3D-игры от первого лица.
Если вы этого еще не сделали, то вам потребуется скачать Unity Hub, где будут храниться все обновления, проекты и установки Unity. Скачать его можно с официального сайта.
После установки заведите бесплатный аккаунт Unity, который позволит создавать проекты. Через него вы также сможете синхронизировать любые проекты в случае авторизации на другой машине. После регистрации вы получите бесплатную лицензию, позволяющую создавать игры на ПК. Если же вы планируете заняться коммерческой разработкой, вам понадобится профессиональная лицензия, которую можно приобрести также через Unity. Завершив настройку, нажмите кнопку Install Editor и выберите предпочтительную версию Unity, как показано на рис. 8.1. Советую выбирать ту версию, которую рекомендует сама платформа Unity, так как она будет наиболее стабильной и актуальной.
Я использовал версию 2021.3.8f, но рекомендованная версия может оказаться иной. После выбора версии нужно указать модули, которые будет поддерживать Unity. Поскольку я работаю на Mac, то в этом уроке вы увидите, что я также выбрал установку Visual Studio. Вам это может не понадобиться, если этот инструмент у вас уже установлен. Если вы решите использовать другой редактор, снимите галочку с Visual Studio. Прокрутите список и выберите Mac Build Support или Windows Build Support, в зависимости от используемой операционной системы. Теперь вы готовы к установке!
После установки ПО вы сможете создать новый проект. Нажмите синюю кнопку New Project. Слева выберите Core. Далее выберите 2D и укажите имя проекта, например Platformer Test Build (рис. 8.2). По завершении нажмите Create Project и подождите, пока Unity откроется.
Начнем с создания простого спрайта (Sprite). Щелкните правой кнопкой мыши в окне Project и выберите CreateSpriteCircle. Обязательно назовите свой спрайт «Player», чтобы установить необходимую организацию ассетов. Описанные действия показаны на рис. 8.3.
Перетащите спрайт Player в окно Hierarchy. В результате он будет помещен в Scene с координатами 0; 0; 0 и преобразуется в объект Player.
Теперь выберите только что созданный объект Player и в окне Inspector нажмите Add Component. Найдите playerScript, выберите New Script и нажмите Create and Add. Так вы не только создадите скрипт в Project, но и автоматически добавите его в объект Player. Этот процесс показан на рис. 8.4.
Дважды щелкните Script в Inspector, чтобы открыть скрипт в редакторе кода.
Начнем с реализации перемещения Player из стороны в сторону. Добавьте в редактор следующий скрипт:
Он позволит персонажу перемещаться по оси Х, то есть влево/вправо. Использование Time.deltaTime обеспечивает плавный переход. По окончании работы сохраните скрипт, чтобы Unity его скомпилировал. Это можно сделать нажатием Ctrl+S, Command+S либо через FileSave. После возвращения в Unity перейдите в Inspector в правой части экрана и установите значение Speed на величину больше нуля. Теперь при запуске игры персонаж будет двигаться влево и вправо.
Настроив передвижение персонажа, перейдем к созданию окружения, по которому он сможет перемещаться. Для этого создадим простую тайловую карту (Tilemap), по которой персонаж будет ходить и прыгать. Для начала, как показано на рис. 8.5, добавьте в сцену Tilemap.
Затем откройте Tile Palette, как показано на рис. 8.6.
Нажмите Create New Palette, присвойте Palette имя «Environment» и нажмите Create. Сохраните ее в каталоге Assets проекта Unity, как показано на рис. 8.7 (по умолчанию откроется диспетчер файлов). Этот каталог будет появляться при сохранении Environment.
Создайте новый квадрат и назовите его Ground, как показано на рис. 8.8. (Таким же способом мы создавали Circle, который сейчас является нашим персонажем.) Перетащите его в Tile Palette в окне (оно должно быть открыто после создания Environment) и сохраните файл в каталоге Assets под названием groundTile.
Выбрав инструмент Brush в окне Tile Palette (на рис. 8.9 эта кнопка третья слева), нажмите в этом же окне на белый квадрат и перетащите его в окно справа, повторяя этот процесс для создания платформ.
Последним шагом создадим возможность коллизии тайловой карты с персонажем. Выберите Tilemap в Hierarchy, как показано на рис. 8.10.
Теперь добавим Tilemap Collider 2D в Inspector, как показано на рис. 8.11.
Добавим персонажу возможность прыгать. Для этого вернемся к playerScript и добавим следующий код, выделенный жирным:
Чтобы было понятно, поясню: rb ссылается на RigidBody2D, а AddForce добавляет импульс в любом указанном направлении. Мы создаем Vector2 (координаты Х и Y) только для этой инструкции с помощью new Vector 2. Значение Х мы оставляем равным 0 и применяем jumpForce к оси Y. Последний элемент — определение режима применения. Инструкция ForceMode2D.Impulse обеспечит применение импульса в виде одного рывка в момент совершения прыжка.
Теперь можно сохранить скрипт и вернуться в Unity. Далее добавим в наш объект RigidBody2D и Collider. Это можно сделать в Inspector, выбрав Player. Нажмите Add Component и найдите в списке компонентов RigidBody2D и Collider. После этого выберем для коллайдера подходящую форму. В нашем случае, поскольку роль персонажа у нас выполняет круг, нужно использовать CircleCollider.
Следующим шагом создадим Ground Check, чтобы персонаж не проваливался сквозь землю. В ходе тестирования геймплея вы могли заметить, что персонаж может непрерывно подпрыгивать. Дело в том, что Unity не знает, может ли персонаж совершить очередной прыжок, то есть находится ли он на земле. Такая механика подошла бы для игр наподобие Flappy Bird, но, поскольку мы создаем платформер, нам нужны единичные прыжки.
Создадим Empty Game Object, который будет служить ориентиром при проверке, коснулся ли персонаж земли. Можно использовать и проверку коллизии, однако тогда персонаж сможет прыгать, отталкиваясь от стен или от потолка. Ground Check ограничивает персонажа и позволяет совершать прыжки только от земли. Как это сделать, показано на рис. 8.12.
Создав новый объект, присвойте ему имя «Ground Check» и сделайте его потомком объекта Player, перетащив Player поверх него в окне Hierarchy.
Теперь поместим новый объект под Player в Scene, чтобы он пересекал поверхность всякий раз, когда персонаж оказывается на земле. Выберите объект Ground Check и нажмите W, чтобы применить инструмент Move. Перетащите объект под кружок персонажа. Используйте в качестве ориентира рис. 8.13.
Теперь нужно внести в скрипт персонажа небольшие изменения, чтобы согласовать его с объектом Ground Check. Откройте playerScript и добавьте в него следующий код, выделенный жирным:
Переменной grounded будет присваиваться значение 1 или 0 (истина или ложь) на основе результата выполнения ее строки. Эта строка отрисовывает линию между персонажем (transform.position) и объектом Ground Check (groundCheck.position). Инструкция 1 << LayerMask.NameToLayer(«Ground») игнорирует все Layers, кроме Ground. Сам же слой Ground мы вскоре создадим.
Теперь добавим в тайловую карту слой, чтобы Ground Check работала с окружением. Выберите объект Tilemap в Hierarchy, а затем в верхней части Inspector щелкните выпадающее меню и выберите Add Layer. Такой же способ мы использовали в 3D-проекте FPS. Этот процесс показан на рис. 8.14.
В окошке User Layer 8 введите «Ground» (название слоя должно совпадать с указанным в строке NameToLayer в playerScript, в нашем случае это Ground) (рис. 8.15).
Снова выберите объект тайловой карты и присвойте ему созданный слой, как показано на рис. 8.16.
Последним шагом присвоим playerScript объект Ground Check. Выберите объект Player и перетащите Ground Check из Hierarchy в поле Ground Check в Inspector.
Теперь вы сможете протестировать проект, в котором персонаж будет передвигаться влево/вправо и прыгать. Если вы захотите расширить проект, добавьте с помощью тайловой карты дополнительные платформы, чтобы персонаж перепрыгивал с одной на другую. Также можно добавить такие механики, как двойной прыжок или движение только в заданном направлении. Вы ограничены лишь своей фантазией!
Более подробно с книгой можно ознакомиться на сайте издательства:
» Оглавление
» Отрывок
По факту оплаты бумажной версии книги на e-mail высылается электронная книга.
Для Хаброжителей скидка 25% по купону — Гейм-дизайн
Узнайте, как придумать и создать свою первую игру. Загляните за кулисы гейм-дизайна и глубоко погрузитесь в теорию и техническую сторону разработки видеоигр.
Книга затрагивает теорию гейм-дизайна, практические особенности реализации игр в различных жанрах, их внутренние механизмы и самые успешные проекты в конкурентном игровом мире. Майкл Киллик, получивший премию BAFTA за наставничество молодых дизайнеров видеоигр, познакомит вас с техническими аспектами разработки игр и поделится приемами, которые помогут сделать первые шаги на пути создания собственных проектов. Вы поймете особенности игровой индустрии и будете разбираться во всех этапах создания игрового продукта, от идеи до разработки и выпуска игры.
Что вас ждет в книге?
Вы наверняка искали в местном книжном магазине или в сети книгу, которая рассказала бы вам о гейм-дизайне и помогла либо в карьере, либо в изучении теории дизайна. При этом вы могли встречать книги, которые содержали много теории или же оказывались полностью техническими. Но вы ищете такую, в которой будет идеальное соотношение одного и другого. Что ж, можете дальше не искать — эта книга перед вами!
Возможно, вы уже ее полистали, чтобы познакомиться с содержанием, но я все же приведу краткое описание всего того, с чем вы встретитесь.
Возможно, вы уже ее полистали, чтобы познакомиться с содержанием, но я все же приведу краткое описание всего того, с чем вы встретитесь.
- Глава 1 — Начало путешествия в мир гейм-дизайна
В этой главе вы познакомитесь с историей игр и наиболее успешными играми, а также узнаете, какое влияние они оказали на современный рынок. Помимо этого, вы создадите свой первый документ по гейм-дизайну и узнаете, что он должен содержать. Это поможет вам подготовиться к презентации своей идеи широкому кругу профессионалов отрасли. - Глава 2 — Видеоигры изнутри
В этой главе мы разберем возможные профессиональные роли и пути развития карьеры в отрасли разработки игр. Здесь же мы перечислим самые распространенные жанры игр и их взаимосвязи, а также обсудим одну из сложнейших проблем, характерных для любого жанра, — генерацию идей. - Глава 3 — С бумаги на экран
В этой главе вы начнете рассуждать о важных столпах индустрии гейм-дизайна и их влиянии на вашу общую идею. По мере рассмотрения движения и геймплея вы также начнете размышлять о том, как выстраиваются связи между элементами вашей идеи. - Глава 4 — Контроллер персонажа от первого лица на Unity
В этой главе вы с помощью игрового движка Unity создадите проект от первого лица, в котором познакомитесь с этим инструментом и узнаете, как использовать полученное демо для будущего проекта. - Глава 5 — Управление миром — дизайн уровней
Усвоив основные принципы, вы перейдете к изучению дизайна уровней и созданию пространства, в котором будет действовать ваш персонаж. Вы научитесь продумывать влияние мира на геймплей, а также важные факторы, которые необходимо учитывать при его создании. - Глава 6 — Друг или враг? Дизайн противников
Разработав персонажей, пора задуматься об их врагах и препятствиях, с которыми столкнется игрок. Кто будет мешать персонажу достичь цели, начиная от наемников и заканчивая разными существами? Как поведение врага должно влиять на игровой опыт? Как создать интересную битву с боссом? - Глава 7 — Механика, система боев и мультиплеер
Эта глава познакомит вас с тремя элементами, наиболее важными для успеха любой игры, и покажет, какую роль они играют. Как они влияют на дизайн всевозможных игр, от однопользовательских экшенов до масштабных многопользовательских онлайн-проектов. - Глава 8 — Руководство по созданию 2D-платформера
Снова вернувшись к Unity, вы пройдете практический урок, который послужит основой для будущей игры. - Глава 9 — HUD и UI. Что это такое?
Заложив все основы игры, мы перейдем к финишным элементам, в том числе тому, что игрок будет видеть и использовать в игре. В этой главе вы познакомитесь с основами разработки HUD (heads-up display, экрана на стекле шлема) и UI (user interface, пользовательский интерфейс), а также узнаете, какова роль этих компонентов в игре. - Глава 10 — Совет напоследок
Завершая путешествие в мир гейм-дизайна, мы подведем итоги и обсудим, как избежать типичных ошибок разработки. И самое главное — узнаем, как можно совершенствовать свои навыки в дальнейшем. - Глава 11 — Конец. Или начало?
Пора подумать о том, как создать презентацию игры и что лучше всего делать дальше. Из множества способов, которыми можно представить свои идеи миру, мы выберем самые эффективные.
Руководство по созданию 2D-платформера
В этой главе мы создадим на Unity основу для 2D-платформера, которую в дальнейшем вы сможете использовать для разработки своей первой игры. Для настройки проекта вам нужно будет проделать все то же самое, что мы уже делали ранее, настраивая проект 3D-игры от первого лица.
Настройка
Если вы этого еще не сделали, то вам потребуется скачать Unity Hub, где будут храниться все обновления, проекты и установки Unity. Скачать его можно с официального сайта.
После установки заведите бесплатный аккаунт Unity, который позволит создавать проекты. Через него вы также сможете синхронизировать любые проекты в случае авторизации на другой машине. После регистрации вы получите бесплатную лицензию, позволяющую создавать игры на ПК. Если же вы планируете заняться коммерческой разработкой, вам понадобится профессиональная лицензия, которую можно приобрести также через Unity. Завершив настройку, нажмите кнопку Install Editor и выберите предпочтительную версию Unity, как показано на рис. 8.1. Советую выбирать ту версию, которую рекомендует сама платформа Unity, так как она будет наиболее стабильной и актуальной.
Я использовал версию 2021.3.8f, но рекомендованная версия может оказаться иной. После выбора версии нужно указать модули, которые будет поддерживать Unity. Поскольку я работаю на Mac, то в этом уроке вы увидите, что я также выбрал установку Visual Studio. Вам это может не понадобиться, если этот инструмент у вас уже установлен. Если вы решите использовать другой редактор, снимите галочку с Visual Studio. Прокрутите список и выберите Mac Build Support или Windows Build Support, в зависимости от используемой операционной системы. Теперь вы готовы к установке!
После установки ПО вы сможете создать новый проект. Нажмите синюю кнопку New Project. Слева выберите Core. Далее выберите 2D и укажите имя проекта, например Platformer Test Build (рис. 8.2). По завершении нажмите Create Project и подождите, пока Unity откроется.
Шаг 1
Начнем с создания простого спрайта (Sprite). Щелкните правой кнопкой мыши в окне Project и выберите CreateSpriteCircle. Обязательно назовите свой спрайт «Player», чтобы установить необходимую организацию ассетов. Описанные действия показаны на рис. 8.3.
Перетащите спрайт Player в окно Hierarchy. В результате он будет помещен в Scene с координатами 0; 0; 0 и преобразуется в объект Player.
Шаг 2
Теперь выберите только что созданный объект Player и в окне Inspector нажмите Add Component. Найдите playerScript, выберите New Script и нажмите Create and Add. Так вы не только создадите скрипт в Project, но и автоматически добавите его в объект Player. Этот процесс показан на рис. 8.4.
Дважды щелкните Script в Inspector, чтобы открыть скрипт в редакторе кода.
Шаг 3
Начнем с реализации перемещения Player из стороны в сторону. Добавьте в редактор следующий скрипт:
public class playerScript : MonoBehaviour
{
public float speed;
void Start()
{
}
void Update
{
float h = Input.GetAxisRaw("Horizontal");
transform.Translate(new Vector3(h * speed *
Time.deltaTime, 0, 0));
}
}
Он позволит персонажу перемещаться по оси Х, то есть влево/вправо. Использование Time.deltaTime обеспечивает плавный переход. По окончании работы сохраните скрипт, чтобы Unity его скомпилировал. Это можно сделать нажатием Ctrl+S, Command+S либо через FileSave. После возвращения в Unity перейдите в Inspector в правой части экрана и установите значение Speed на величину больше нуля. Теперь при запуске игры персонаж будет двигаться влево и вправо.
Шаг 4
Настроив передвижение персонажа, перейдем к созданию окружения, по которому он сможет перемещаться. Для этого создадим простую тайловую карту (Tilemap), по которой персонаж будет ходить и прыгать. Для начала, как показано на рис. 8.5, добавьте в сцену Tilemap.
Затем откройте Tile Palette, как показано на рис. 8.6.
Нажмите Create New Palette, присвойте Palette имя «Environment» и нажмите Create. Сохраните ее в каталоге Assets проекта Unity, как показано на рис. 8.7 (по умолчанию откроется диспетчер файлов). Этот каталог будет появляться при сохранении Environment.
Создайте новый квадрат и назовите его Ground, как показано на рис. 8.8. (Таким же способом мы создавали Circle, который сейчас является нашим персонажем.) Перетащите его в Tile Palette в окне (оно должно быть открыто после создания Environment) и сохраните файл в каталоге Assets под названием groundTile.
Выбрав инструмент Brush в окне Tile Palette (на рис. 8.9 эта кнопка третья слева), нажмите в этом же окне на белый квадрат и перетащите его в окно справа, повторяя этот процесс для создания платформ.
Шаг 5
Последним шагом создадим возможность коллизии тайловой карты с персонажем. Выберите Tilemap в Hierarchy, как показано на рис. 8.10.
Теперь добавим Tilemap Collider 2D в Inspector, как показано на рис. 8.11.
Шаг 6
Добавим персонажу возможность прыгать. Для этого вернемся к playerScript и добавим следующий код, выделенный жирным:
public class playerScript : MonoBehaviour
{
public float speed, jumpForce;
public Rigidbody2D rb;
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void Update
{
float h = Input.GetAxisRaw(“Horizontal”);
transform.Translate(new Vector3(h * speed *
Time.deltaTime, 0, 0));
if (Input.GetButtonDown("Jump"))
{
rb.AddForce(new Vector2(0, jumpForce),
ForceMode2D.Impulse);
}
}
}
Чтобы было понятно, поясню: rb ссылается на RigidBody2D, а AddForce добавляет импульс в любом указанном направлении. Мы создаем Vector2 (координаты Х и Y) только для этой инструкции с помощью new Vector 2. Значение Х мы оставляем равным 0 и применяем jumpForce к оси Y. Последний элемент — определение режима применения. Инструкция ForceMode2D.Impulse обеспечит применение импульса в виде одного рывка в момент совершения прыжка.
Теперь можно сохранить скрипт и вернуться в Unity. Далее добавим в наш объект RigidBody2D и Collider. Это можно сделать в Inspector, выбрав Player. Нажмите Add Component и найдите в списке компонентов RigidBody2D и Collider. После этого выберем для коллайдера подходящую форму. В нашем случае, поскольку роль персонажа у нас выполняет круг, нужно использовать CircleCollider.
Шаг 7
Следующим шагом создадим Ground Check, чтобы персонаж не проваливался сквозь землю. В ходе тестирования геймплея вы могли заметить, что персонаж может непрерывно подпрыгивать. Дело в том, что Unity не знает, может ли персонаж совершить очередной прыжок, то есть находится ли он на земле. Такая механика подошла бы для игр наподобие Flappy Bird, но, поскольку мы создаем платформер, нам нужны единичные прыжки.
Создадим Empty Game Object, который будет служить ориентиром при проверке, коснулся ли персонаж земли. Можно использовать и проверку коллизии, однако тогда персонаж сможет прыгать, отталкиваясь от стен или от потолка. Ground Check ограничивает персонажа и позволяет совершать прыжки только от земли. Как это сделать, показано на рис. 8.12.
Создав новый объект, присвойте ему имя «Ground Check» и сделайте его потомком объекта Player, перетащив Player поверх него в окне Hierarchy.
Шаг 8
Теперь поместим новый объект под Player в Scene, чтобы он пересекал поверхность всякий раз, когда персонаж оказывается на земле. Выберите объект Ground Check и нажмите W, чтобы применить инструмент Move. Перетащите объект под кружок персонажа. Используйте в качестве ориентира рис. 8.13.
Шаг 9
Теперь нужно внести в скрипт персонажа небольшие изменения, чтобы согласовать его с объектом Ground Check. Откройте playerScript и добавьте в него следующий код, выделенный жирным:
public class playerScript : MonoBehaviour
{
public float speed, jumpForce;
public Rigidbody2D rb;
public Transform groundCheck;
bool grounded = false;
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void Update
{
float h = Input.GetAxisRaw(“Horizontal”);
grounded = Physics2D.Linecast(transform.position,
groundCheck.
position, 1 << LayerMask.NameToLayer("Ground"));
transform.Translate(new Vector3(h * speed * Time.deltaTime,
0, 0));
if (Input.GetButtonDown("Jump") && grounded)
{
rb.AddForce(new Vector2(0, jumpForce),
ForceMode2D.Impulse);
}
}
}
Переменной grounded будет присваиваться значение 1 или 0 (истина или ложь) на основе результата выполнения ее строки. Эта строка отрисовывает линию между персонажем (transform.position) и объектом Ground Check (groundCheck.position). Инструкция 1 << LayerMask.NameToLayer(«Ground») игнорирует все Layers, кроме Ground. Сам же слой Ground мы вскоре создадим.
Шаг 10
Теперь добавим в тайловую карту слой, чтобы Ground Check работала с окружением. Выберите объект Tilemap в Hierarchy, а затем в верхней части Inspector щелкните выпадающее меню и выберите Add Layer. Такой же способ мы использовали в 3D-проекте FPS. Этот процесс показан на рис. 8.14.
В окошке User Layer 8 введите «Ground» (название слоя должно совпадать с указанным в строке NameToLayer в playerScript, в нашем случае это Ground) (рис. 8.15).
Снова выберите объект тайловой карты и присвойте ему созданный слой, как показано на рис. 8.16.
Шаг 11
Последним шагом присвоим playerScript объект Ground Check. Выберите объект Player и перетащите Ground Check из Hierarchy в поле Ground Check в Inspector.
Теперь вы сможете протестировать проект, в котором персонаж будет передвигаться влево/вправо и прыгать. Если вы захотите расширить проект, добавьте с помощью тайловой карты дополнительные платформы, чтобы персонаж перепрыгивал с одной на другую. Также можно добавить такие механики, как двойной прыжок или движение только в заданном направлении. Вы ограничены лишь своей фантазией!
Об авторе
Майкл Киллик — преподаватель гейм-дизайна, гейм-дизайнер и наставник молодых разработчиков видеоигр, номинированный на премию BAFTA (British Academy of Film and Television Arts). Он ведет третий уровень курса разработки игр и возглавляет студенческое издательство Rizing Games, помогающее студентам создавать и выпускать свои мобильные и консольные игры на мировые рынки. Он обучает будущих гейм-дизайнеров всему, что необходимо для создания первых игр и их выпуска в мир геймеров. За проделанную работу на поприще разработки игр и поддержку, которую он обеспечивает молодым специалистам, Майклу было присвоено звание члена академии BAFTA, чтобы он и дальше мог оказывать поддержку будущим поколениям гейм-дизайнеров.
Более подробно с книгой можно ознакомиться на сайте издательства:
» Оглавление
» Отрывок
По факту оплаты бумажной версии книги на e-mail высылается электронная книга.
Для Хаброжителей скидка 25% по купону — Гейм-дизайн