Как сделать игру на unreal engine 4 с нуля

Добавил пользователь Morpheus
Обновлено: 09.09.2024

Мощный движок Unreal Engine 4 включает в себя огромный функционал, на изучение которого требуются месяцы теории и практики. Пожалуй, самым сложным периодом познания, является начало изучения. Начинающие игроделы часто путаются в обилии кнопок и пунктов, что значительно замедляет процесс “покорения” программы.

Чтобы ваше знакомство с Unreal Engine стало простым и быстрым, начните его правильно, с пошагового курса видеоуроков. Смотрите, практикуйтесь и создавайте качественные, трехмерные игры.

Основы Unreal Engine 4

Замечательный курс, предназначенный для начинающих пользователей движка. Включает в себя базовые знания создания игр, а также инструкции по работе с материалами и редакторами Blueprint, StaticMesh и UMG. Курс разбит на 58 уроков, общей длительностью более 11 часов. За это время вы не только освоите функционал движка, но и станете уверенным пользователем Unreal Engine 4, способным воплотить любую идею в рамках виртуальной реальности. Наслаждайтесь просмотром и радуйте нас своими работами.

Обзор окна лаунчера, появляющегося при первом запуске программы.
Обзор основных элементов и окон интерфейса Unreal Engine 4.
Базовые элементы управления в окне просмотра уровня.
Разбор режимов и опций для управления объектами.
Для чего нужна экспозиция и как её использовать.
Продолжаем изучать панель инструментов.
В данном уроке узнаем, как пользоваться окном обозревателя контента.
Наглядная демонстрация создания простого игрового уровня на движке Unreal Engine 4.

Урок 1 - Первый запуск
Урок 2 – Интерфейс
Урок 3 - Окно Viewport (Часть 1)
Урок 4 - Окно Viewport (Часть 2)
Урок 5 - Окно Viewport (Часть 3)
Урок 6 - Toolbar (Часть 1)
Урок 7 - Toolbar (Часть 2)
Урок 8 - Окно Modes
Урок 9 - Content Browser
Урок 10 - Создание уровня
Урок 11 - BSP браши
Урок 12 - Редактирование брашей
Урок 13 - Строим дом
Урок 14 - Экспорт геометрии
Урок 15 - Импорт моделей
Урок 16 -Материалы (Часть 1)
Урок 17 -Материалы (Часть 2)
Урок 18 -Материалы (Часть 3)
Урок 19 - Русский шрифт в игре
Урок 20 - Плавная смена света
Урок 21 - Сохранение и загрузка игры

Редактор Blueprint
Урок 1 - Обзор редактора
Урок 2 - Типы блоков
Урок 3 – Переменные
Урок 4 - Пример скрипта
Урок 5 - Actor Blueprint
Урок 6 - Construction Script
Урок 7 - Коммуникация блупринтов (Cast)
Урок 8 - Коммуникация блупринтов (BP Interface)
Урок 9 – Функции
Урок 10 – Макрофункции
Урок 11 - Контроль последовательностей (Часть 1)
Урок 12 - Контроль последовательностей (Часть 2)
Урок 13 – Массивы
Урок 14 - Math Expression
Урок 15 - Шкала времени
Урок 16 – Структуры
Урок 17 – Перечисление
Урок 18 - Передача данных между уровнями
Урок 19 - О Cast'e более детально
Урок 20 - Настройка персонажа

Редактор StaticMesh
Урок 1 - Импорт модели
Урок 2 - Обзор StaticMesh
Урок 3 - Создание коллизии
Урок 4 - Создание коллизии вручную
Урок 5 - Развертка LightMap

Редактор материалов
Урок 1 - Что такое материалы
Урок 2 - Интерфейс редактора
Урок 3 - Основы работы с материалами
Урок 4 - Свойства материалов
Урок 5 - Манипуляция текстур
Урок 6 - Работа с масками

Как делать крутые презентации в Prezi Качественный мини-курс в формате видео. Поможет вам стать уверенным пользователем программы Prezi и научит создавать действительно крутые презентации.

Инструкция по работе с Magic Particles 3D Сборник авторских видеоуроков по работе с программой. Позволяет изучать программу как комплексно, так и вникать в определённый инструмент или функцию. С его помощью вы быстро научитесь создавать трёхмерные спецэффекты для фото и видео.

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


Unreal Engine 4 Создание игр, 3D движки, Мобильные игры, Игры для браузеров


NeoAxis Создание игр, 3D движки


Creation Kit Создание игр, 3D движки


Unity3D Создание игр, 2D движки, 3D движки, Мобильные игры, Игры для браузеров

Изучай

И сегодня мы с тобой познакомимся с созданием игр на Unreal engine 4. Кто из нас не мечтал о создании собственной игры! Создание игр - это сложный и трудоёмкий процесс, давай поговорим об этом.

Тема связана со специальностями:

Весь процесс создания игры, после выбора движка, начинается с идеи “концепта игр”, то есть сначала полностью на бумаге придумывается игра, после этого ты расписываешь все по пунктам, что нужно будет сделать в игре (от того, что нужно создать меню игры и уровень для него, создать персонажа и т.д.) как можно более широко, для того чтобы у тебя было полное представления о том, что ты будешь писать и какая игра в итоге у тебя получится, после тебе нужно определиться, какой язык программирования ты будешь использовать. Unreal engine 4 предоставляет два языка программирования: это С++ и Blueprint (язык программирования движка, написанный специально для него).


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

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


Видео курсы по схожей тематике:

Создание Counter Strike. Сетевой FPS shooter на Unity

Создание Counter Strike. Сетевой FPS shooter на Unity

Kodu Game Lab

Создаем игру типа “Pok?mon Go“

Создаем игру типа “Pok?mon Go“

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


Само игровое меню поделено на несколько визуальных интерфейсов “Widget”, это условно (Главное меню, Обшей Widget настроек и каждый отдельный Widget настройки управления, графики и т.д.), причем такое меню не требует глубоких знаний в программировании, если ты используешь язык “Blueprint”, так как все настолько упрощено и интуитивно понятно, на этом моменте не возникает трудностей, достаточно знать основы в программировании.

Следующим шагом было реализация игрового персонажа. Благо, Unreal engine 4 предоставляет нам заготовку под персонажа, что полезно как профессионалам, так и новичкам, что позволяет не тратить время на начальную настройку персонажа, а просто добавлять в нее изменения так, что мы этим и воспользуемся, впоследствии заменив модель и анимации.

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


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

Бесплатные вебинары по схожей тематике:

Создание сетевых игр на Unity3d. Обзор UNet. Практикум

Создание сетевых игр на Unity3d. Обзор UNet. Практикум

Новая система ввода в Unity.

Новая система ввода в Unity.

Создание Action RPG на Unity 3D под Android. Часть 2.

Создание Action RPG на Unity 3D под Android. Часть 2.



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


Меня зовут Игорь Титаренко , я работаю Unreal Engine разработчиком в компании SolidCore Games . Свежий пример, который я хочу с вами рассмотреть — прототип раннера. По этой ссылке вы можете скачать файлы проекта и потестить его.

В готовом прототипе будет:

Персонаж бегущий вперед, на кнопки “A”, “D” меняем локейшн по оси “ X ”.


Уровень, по которому мы передвигаемся — Tile Map. При перемещении персонажа, пройденный тайл перемещается вперед.


Монеты, которые мы будем собирать, и подсчет очков.


Простой UI (Game Over, Score, Restart) и к онец игры при столкновении с препятствием.


Ассеты я подготовил заранее и буду подгружать из готового проекта. Логику напишу с нуля.

Создание проекта и настройка персонажа

Создадим проект на основе Third Person, в котором у нас по умолчанию будет персонаж и уровень.


Я убираю из уровня лишнюю геометрию и настраиваю персонажу управление. Изначально, при нажатии на “W” вызывается событие MoveForward и персонаж передвигается вперед. Мы будем вызывать логику движения вперед не нажатием кнопки, а на Event Tick, то есть на каждый кадр в игре, чтобы персонаж все время бежал вперед.


Затем настраиваем перемещение персонажа на кнопки “A”, “D” — меняем локейшн по оси X .


Создаем массив float переменных, в котором будем хранить значения локации по оси X каждой из трех “дорожек”, по которым бежит персонаж.


Далее проверяем по какой полосе мы бежим — 0, 1 или 2, затем на нажатие кнопок “A”, “D” добавляем или отнимаем индекс полосы, если он не выходит за минимальное и максимальное значение.


После этого, в зависимости от индекса полосы дороги, задаем координаты по оси Х для нашего персонажа.


Tile Map

Начнем с подготовки ассетов для генерации уровня. Нам понадобится:

  1. Машинки, которые мы будем расставлять по уровню.
  2. Монетки, которые мы будем собирать.
  3. Tile — blueprint actor с наполнением уровня. Из тайлов мы будем генерировать “коридор” нашего уровня.


BP_Car

Теперь сделаем машинки, которые будут спауниться на уровне. Чтобы разнообразить игру, будем генерировать случайную машину из массива возможных вариантов. Создаем новый blueprint actor, добавляем ему компонент Static Mesh. Создаем массив с вариантами геометрии для наших машин. Далее пишем логику, которая при создании машинки будет генерировать рандомное (в пределах массива) число — индекс, и по нему задавать нашему эктору геометрию из массива.


BP_Coin

У каждого отдельного тайла на каждой полосе дороги в случайном месте по оси Y спаунится машинка, и на случайной полосе спаунится группа монет.


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


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


По умолчанию сделаем наш actor физическим объектом, чтобы включить гравитацию. Для этого поставим галочку physics enabled. Далее добавим логику отключения физики, когда она нам больше не нужна.


Сделаем так, чтобы монетка все время вращалась.


BP_Tile

Создаем тайл, из которого будет генерироваться уровень, по которому будет бежать персонаж. Я создаю новый Blueprint actor, добавляю ему нужные нам компоненты:

  1. StaticMesh — геометрию зданий и окружение.
  2. Box Collision “SpawnPoint Box” коллизию которая будет отрабатывать событие, когда персонаж пробежит данный тайл. Это необходимо, чтобы мы могли вызвать логику уничтожения данного тайла и спауна нового впереди.
  3. Spawn point — точку координат, в которой мы будем спаунить новый тайл.

Далее пишем функции генерации машин. Логика здесь такая — получаем локейшн тайла и в случайном месте из заданного диапазона по оси Y спауним BP_Car.


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


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


Теперь в GameMode напишем логику генерации уровня. Класс GameMode отвечает за настройку правил игры. Правила могут включать в себя любое поведение, связанное с игрой. Например, условия выигрыша или, как в нашем случае, генерацию тайл мапа. Функция спауна тайлов будет выглядеть так:


Спауним первый тайл в нулевых координатах, которые записаны в переменную NextSpawnPoint. После этого вытаскиваем локейшн у его Spawn Point. Получаем координаты этой точки и записываем их в переменную NextSpawnPoint — эти координаты будут использованы для следующего тайла. Вызываем функцию еще раз, чтобы заспаунить следующий тайл. В Game Mode на Event Begin Play создадим цикл, который будет вызывать спаун тайлов нужное нам количество раз.


Начало игры запускает цикл. Он проходит от нуля до пяти. То есть функция Spawn Tile вызывается шесть раз. Соответственно, в начале игры спаунится шесть тайлов.

Если сейчас запустить игру, сгенерируется наш tile map, но мы можем пробежать его от начала до конца. Напишем логику для real time генерации тайлов при перемещении по уровню. В BP_Tile добавляем к SpawnPoint Box событие On Component Begin Overlap. Оно будет срабатывать, когда бокс компонент пересечется с другим объектом игрового мира, у которого есть коллизия. Событие проверяет, что столкнулось с SpawnPointBox. Если это character, которым мы управляем, то вызываем из Game Mode функцию спауна нового тайла и после задержки удаляем пройденный тайл.


UI, Подсчет очков

Создадим Widget Blueprint и назовем его WBP_Point.


Добавим в наш виджет следующие текстовые виджеты:

  • Score
  • GameOver
  • Your Score
  • Total Score

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


Visibility всех элементов виджета кроме Score устанавливаем Hiden и д обавляем кнопку Restart, на нажатие которой заново будет открываться наш уровень.



В целом наш виджет должен выглядеть примерно так:


Перейдем в Graph и создадим переменную “Score” типа integer — целое число. Для текстов Score и Total Score привяжем созданную интовую переменную в качестве значения. Теперь из переменной зададим значение в текст, а переменную, в свою очередь, будем менять в персонаже.



Теперь добавим наш виджет во вьюпорт. Для этого в ThirdPersonCharacter на Event Begin Play создадим виджет WBP_Points, добавим его во вьюпорт и сохраним ссылку на него в переменную “Widget Score”.


Теперь у нас есть практически все для того, чтобы собирать монетки. Создадим в ThirdPersonCharacter событие PickupPoints. При вызове события получаем значение переменной Score из ссылки на виджет Widget Score, добавляем к нему 5 очков и обратно записываем в переменную Score.


PickupPoints будем вызывать из BP_Coin. Добавим событие On Component Begin Overlap для static mesh, в котором проверим с чем пересекается монетка. Если это ThirdPersonCharacter, вызываем у него PickupPoints и уничтожаем монетку.


Теперь, когда персонаж пересечется с монеткой, количество очков увеличится на 5, что сразу отобразится в виджете, а монетка исчезнет/подберется.

Далее создадим логику конца игры, которая будет вызываться на столкновение персонажа с машиной. Для этого создаем в WBP_Points функцию Game Over, в которой будем менять visibility текстовых виджетов Game Over, Total Score, Restart button.


Добавим отдельный Box Collision component в ThirdPersonCharacter.


Привяжем событие на столкновение с этим боксом, в котором мы проверим: если ThirdPersonCharacter сталкивается с BP_Car, то вызываем функцию Game Over из WBP_Points, которая отрисует нужный нам интерфейс. Далее отключаем движения персонажу и включаем отображение курсора мыши, чтобы иметь возможность нажать Restart.


Теперь, если врезаться в машинку, мы получим такой результат:


Основы разработки

Хотите постичь основы разработки игр в Unreal Engine 4? Не знаете особенностей создания 3D-персонажей под современный движок, как моделировать в 3Ds Max или ZBrush, как делать Physically Based-текстурирование в Substance Painter, не знаете как формировать ландшафт и дизайн уровней в UE4, как же программировать с помощью Blueprint? Тогда вам стоит обратить внимание на специальные курсы.

Вы сможете создавать персонажей, узнаете, как интегрировать их в игровой движок Unreal Engine 4, научитесь работать с инструментом ландшафта в UE4, познакомитесь с основами работы в ZBrush, создадите в нем с нуля свою детализированную модель статуи, узнаете об особенностях оптимизации моделей для игр, в итоге соберете свой проект в готовую игру.

1

0

1

0

1

Дело в том, что в сапёре нужно реализовывать "Flood fill" алгоритм для открывания пустых ячеек

А в пакмане нужно реализовать А* алгоритм поиска пути для приведений

Сомневаюсь, что на Blueprint это выйдет красиво

0

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

Открытие ячеек также сделать несложно на события по клику и с просчётом коллизий с рядом стоящими ячейками.

1

В пакмане есть красные приведения, которые выбирают кратчайший путь до пакмана. Ваш алгоритм не подходит. Чаще всего для поиска кратчайшего пути в компьютерных применяют алгоритм A* (произносится как "а стар")

На C++ алгоритм будет выглядеть намного более читабельнее, чем на Blueprint

0

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

0

1

Очень просто можно сделать всю игру, любого масштаба на блюпринте. И это действительно не сказки. Также и у Крайэнжин можно сделать игру на Флоуграф и Луа скрипт полностью без применения С++. Я раньше сам сомневался пока не увидел рабочие варианты кода. Реально все просто. Поверь

0

1

К сожалению я не могу, да и нет времени заниматься посторонними делами, так как у меня трое детей и я работаю над двумя проектами посменно. Как программист на Юнити и на Анреал энжин. Один проект уже в продаже в Стиме, второй делаю по заказзу и будет тоже в Стиме продаваться. Но я очень бы хотел показать работу блюпринта в сложных алгоритмах если бы у меня было время А зачем тебе эта реализация, чисто для доказательства или реально для какого то проекта? Если для доказательства, то это мне кажется врд ли кто-то будет делать, так как это просто не зачем, ведь у нас тут не дебаты по поводу кто круче, а форум для разработчиков, где каждый помогает, а не доказывает, друг другу

0

Не в этом дело. Я абсолютно не думаю доказывать кто круче. Мне нужна достоверная информация, чтобы я мог сказать начинающему в UE фразу типа: не используй C++ для реализации алгоритма A*, изучай, как это сделать на Blueprint, потому что то-та то-та, к примеру, на Blueprint этот алгоритм будет намного более наглядным, чем в C++. Либо наоборот, я должен скачать что А* реализуй на C++ а эту часть проета на Blueprint

1

В принципе, скажу, что реально на блюпринте не всегда легче чем кодом. Я вот постоянно мучаюсь писать на блюпринте так как привык писать строки а не блоки. Поэтому решать на чем писать лучше по разному исходя из ситуации. Когда я смотрел исходники игры Ark, то я там увидел разный подход к программированию. Видно, что программисты писали на разных языках исходя из полученной задачи. Прямо как сказал ты. Поэтому не исключено, что алгоритм A* лучше писать на С++. Это мнение я поддерживаю

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