Создание игры на Unreal Engine 4 за 150 часов (видео + исходники) / Хабр
Приветствую, Хабр! Хотел бы познакомить вас с относительно небольшим проектом, который я сделал c нуля примерно за 150 часов (50 заходов ~3 часа каждый) на Unreal Engine 4. Проект я делал в прямом эфире только на стримах раз в неделю (в общей сложности ушел год), попутно отвечая на вопросы пользователей.
Сам проект не предназначался как коммерческий. Целью я ставил на практике показать всю сложность разработки игр, а именно такие проблемы, как:
- Планирование и прототипирование проекта
- Продумывание и реализация архитектуры проекта и отдельных его компонентов
- Реализация интерфейса пользователя
- Отладка и исправление ошибок
- Работа с ассетами и графикой
В конце всей серии стримов у нас получился играбельный прототип “Сурвайвл” шутера. Те, у кого стакан наполовину полон, смогут даже назвать это пре-альфой без сюжета.
Если вам интересны подробности проекта, записи стримов, исходники и прочее, читайте далее.
Весь проект был реализован на визуальной системе программирования, под названием “Блупринты”. И конечно многие спецы могут назвать её ребяческой, разработать на ней можно спокойно даже относительно крупный проект. Более того, это можно сделать относительно быстро, как мы уже смогли доказать.
Сразу хочу ответить на вопрос: «Почему Блупринты, а не С++?«. Ну во первых, когда я начинал серию, плюсы я почти не знал. Хотя я и сейчас подобный сингл делал бы на БП. Во вторых, БП почти не уступают плюсам в нашем случае, но при этом дают ряд возможностей: Не позволяют наделать множество ошибок, возможных с плюсами, не приходится отвлекаться между БП и С++, понятнее новичкам. Да и они в нашем случае не намного медленнее, учитывая тот факт, что почти вся логика построена на событиях.
Мы так же успели немного поработать над графикой. К сожалению, ассеты делать времени у нас не было, поэтому мы часть оставили пустышками, часть сделали прямо в редакторе из примитивов, а некоторый контент позаимствовали из бесплатных демок Epic Games.
Тем не менее, что-то успели сделать и сами, например систему дня и ночи, постобработку для воды и некоторые материалы объектов сцены.В планы моих стримов так же стояли и проблемы, которые могут возникнуть при разработке. Их я специально решал в прямом эфире, дабы не только показать, с чем могут столкнуться юные разработчики, но и как отлаживать свой код, искать баги и писать свой код так, что бы все это дело можно было делать в два раза быстрее. Конечно опыта в программировании у меня не десятки лет, и это сказывалось на том, какие порой глупые ошибки я делал. Да и уверен, что многие разработчики могут оспорить множество моментов в процессе написания игры.
Естественно, полноценной игрой это вряд ли можно назвать, так как нету ни сюжета, ни цели в игре — только чистая механика. Тем не менее, я считаю, что результатом можно гордится и он вполне отражает то, для чего задумывался весь проект.
Список всего, что мы успели реализовать в нашей игре
Персонаж
- Управление персонажем
- Система жизненных показателей (Жизни, броня, стамина, голод, жажда)
- Переключение вида (от первого лица и от третьего)
- Моделька (сделали во Fuse, анимации взяли с Mixamo)
- Настроенные анимации передвижения и использования оружия
- Универсальное взаимодействие с предметами
Объектная система инвентаря
- Компонент инвентаря (встраивай в любой объект, куда хочешь)
- Клеточная система с поддержкой различного размера предметов
- Размер инвентаря по клеткам на страницу и по весу.
- Класс предметов, которые можно положить в инвентарь. Предметы хранятся в качестве объектов.
- Вес, размер, информация, состояние предмета
- Функционал для стака (когда в одной ячейке много одного предмета)
- Возможность добавить логику использования предмета
- Выбрасывание из инвентаря
- Интерфейс для взаимодействия с инвентарем
- Интерфейс для обмена между другим компонентом и своим.
- Drag&Drop манипуляция объектами между инвентарями и внутри одного.
- Контекстное менюу предметов
- Подсказки при наведении на предметы в инвентаре и в мире.
- Список генерируемых предметов при создании объекта с компонентом / начале игры.
- Список начальных предметов при создании объекта с компонентом / начале игры.
- Система торговли между другим инвентарем
- Интерфейс торговли
- Компонент менеджмента денег (необходим для работы торговли)
Система экипировки
- Экипировка нескольких типов предметов: Шляпы, Топ, Брюки, Ботинки, Оружие
- Скелетная синхронизация у Топа, брюк и ботинок. (Шляпы и оружие по сокетам)
- Удобное окошко для экипировки с поддержкой Drag&Drop
- Поддержка логики-модификаторов при одевании
Оружие
- Дальнобойное оружие
- Перезарядка
- Использование предметов-патронов из инвентаря
- Поддержка классов снарядов/пуль
- Автоогонь/одиночный огонь
- Отдача с разбросом (свой + от факторов, н.п. бег или приседание)
- Холодное оружие (с несколькими видами проверок на урон на выбор)
- Состояние оружия ухудшается при использовании
Система крафта
- Крафт по рецепту (выбрал рецепт, он скрафтил, аля фоллаут)
- Крафт по предметам (закинул нужные предметы, он скрафтил, аля майнкрафт)
- Интерфейс пользователя только для второго типа крафта.
Агрессивные мобы
- Мобы ближнего боя (если увидят, побегут и начнут бить)
- Мобы смешанного типа (стреляют, но если достаточно близко, побегут что бы ударить)
- Дальники оббегают препятствия, если не могут выстрелить.
- Есть встроенный инвентарь для лута после убийства.
- Зона спауна
- Список классов
- Шанс спауна
- Городские NPC, патрулирующие свою зону спауна
- Уникальные NPC
- Базовый контроллер расписания для уникальных НПЦ
- Реакция на урон (убегают или используют имеющееся оружие)
- Встроенный инвентарь для лута после убийства.
- Объектная диалоговая система
- Дерево диалогов
- Каждый ответ — объект
- Для каждого ответа можно докинуть любую логику или условие доступности.
- Интерфейс диалога
- Несколько готовых классов ответа (запускает торговлю, забирает ресурсы, если есть, выходит из диалога)
Строительство
- Класс конструкций, которые поддерживают размещение
- Использование предметов-ресурсов из инвентаря при размещении.
- Снаппинг на некоторых типах конструкций (н.п. Стены, фундамент, окна)
- Менюшка с конструкциями
- Подсвечивание конструкций, на которые хватает ресурсов
Дополнительно
- Небольшая карта с городом, лесом, водоемами (можно плавать).
- Система смены дня/ночи
- Автомобили
- Вид от первого или третьего. Общее с персом
- Включение/выключение фар.
- Встроенный компонент инвентаря (нужно взаимодействовать у багажника)
- Кое как работающие лестницы вертикального типа.
- Главное меню
- Меню паузы
- Меню с настройками графики
Впрочем, говорить о проекте можно бесконечно. И чтобы не превращать статью в книгу, предлагаю ознакомиться с игрой и возможностями по видео. А тем, кому стало действительно интересно, чуть ниже сможете найти записи всех стримов, ссылки на исходники и билд игры.
→ Записи всех 50-ти частей стримов
Содержание по частям
- Начинаем и планируем проект. Создаем управление и поведение персонажа.
- Начинаем делать систему инвентаря.
- Продолжаем делать базу системы инвентаря.
- Готовим базу для экипировки и вооружения.
- Работа над оружием и использовании патронов.
- Делаем автострельбу и прицеливание.
- Создаем базовую систему крафта.
- Бег, переработка предметов и их износ.
- Реализовываем перезарядку для оружия.
- Делаем оружие ближнего боя.
- Доделываем ближний бой и делаем лестницу по которой можно взбираться.
- Делаем интерактивные предметы: Дерево, камень, кусты.
- Делаем HUD и начинаем делать интерфейс для инвентаря.
- Продолжаем работать над интерфейсом инвентаря. Делаем генерацию ячеек с предметами.
- Продолжаем делать генерацию ячеек и поиск места для предмета. Добавляем страницы инвентаря.
- Делаем небольшое взаимодействие с предметами в инвентаре и окно подробной информации.
- Сделали Drag&Drop перетаскивание предметов по инвентарю и в другой инвентарь.
- В этой части речь идет о визуализации крафта.
- Создаем окно с выбором количества предметов из стака для переброса в другой инвентарь.
- Делаем поддержку разных рецептов крафта, а так же фиксим разные баги у инвентаря.
- Создаем систему смены дня и ночи, а так же делаем новую сцену для нашего проекта.
- Начинаем создавать AI для агрессивных ботов.
- Делаем атаку мобов, а так же реакцию на атаку. Плюс реализуем сбор лута с мертвых мобов.
- Делаем зону спауна для нпц. Так же добавляем генерацию случайных предметов в инвентаре.
- Обновляемся до 4.13, а так же делаем дальних агрессивных нпц.
- Добавляем разные элементы на HUD. Добавляем ручную перезарядку оружия.
- Доделываем поддержку скелетной одежды и шапок. Добавляем анимацию для оружия от первого лица.
- Делаем интерфейс для работы с нашей системой экипировки.
- Начинаем делать торговую систему и компонент менеджмента денег.
- Продолжаем делать торговлю, создавая и настраивая компонент торговли.
- Делаем отмену торговли, а так же настраиваем анимацию перезарядки.
- Создаем транспорт со своим инвентарем, фарами и переключением вида. Создаем фонарик.
- Создаем строительство (а точнее систему размещения объектов перед собой).
- Делаем интерфейс для строительства, делаем привязку для стен.
- Создаем ещё несколько видов конструкций: Палатка, кровать, стул, стол, лампа, дверь. сундук, костер.
- Добавляем крышу, окна. Доделываем выравнивание относительно других конструкций.
- Делаем небольшое поселение, а так же населяем его NPC, которые так же создаем в этом уроке.
- Начинаем делать систему диалогов для наших жителей.
- Настраиваем туман и постобработку. Импортируем модель зомби и настраиваем ему анимации.
- Доделываем систему диалогов.
- Делаем взаимодействие с предметами от третьего лица, а так же модификаторы для брони.
- Создаем главное меню, меню паузы и настройки графики. А так же собираем первую сборку игры.
- Реализуем расписание для уникальных жителей.А так же что бы городские NPC убегали от атаки.
- Добавляем контекстное меню в инвентарь, а так же фиксим некоторые баги нашего инвентаря.
- Добавляем отдачу, разброс, анимацию выстрела и возможность ударить для огнестрельного оружия.
- Доделаем агрессивных и городских NPC, фиксим разные баги, связанные с ними.
- Настраиваем анимации для главного персонажа. Добавляем различную одежду.
- Исправляем различные ошибки в нашей игре.
- Исправляем различные ошибки крафта, NPC и экипировки в нашей игре.
- Немного дорабатываем карту и собираем последний билд.
→ Исходники на Git (загрузка ZIP архивом не работает, архив почему-то поврежден.)
→ Исходники на ЯДиск(Лицензия та же, что и в исходниках)
→ Билд игры
В будущем я и дальше планирую проводить подобные стримы. Например на очереди у нас стрим по мультиплеерному шутеру, а затем стратегия.
Куксон Арам, Даулингсока Райан, Крамплер Клинтон: Разработка игр на Unreal Engine 4 за 24 часа
Разработка игр на Unreal Engine 4 за 24 часа.
Всего за 24 урока, каждый продолжительностью 1 час или меньше.
Вы узнаете, как начать проектировать великолепные игры с помощью движка Unreal Engine 4 под Windows, Mac, PS4, Xbox One, iOS, Android, Интернета, Linux — или для всех сразу!
Пошаговый подход к обучению, представленный в книге, покажет, как работать с интерфейсом Unreal Engine 4, продемонстрирует рабочие процессы и самые мощные редакторы и инструменты движка. За считанные часы вы научитесь создавать эффекты, пользоваться визуальным проектированием, реализовывать физику и даже вести разработку для мобильных устройств и HUD-интерфейсов. Каждый урок дополняет знания, полученные вами в предыдущих, создавая крепкий фундамент для успешной работы с реальными задачами.
Пошаговые инструкции познакомят вас с часто встречающимися задачами разработки в Unreal Engine 4.
Практические, реальные примеры продемонстрируют, как применять навыки.
Контрольные вопросы и упражнения помогут вам протестировать свои знания и расширить навыки.
Примечания и советы подскажут комбинации клавиш и решения.
Эрэм Куксон — профессор кафедры интерактивного дизайна и разработки игр (ITGM, Interactive Design and Game Development) Колледжа арта и дизайна Саванны (SCAD, Savannah College of Art and Design). В течение 15 лет он преподает игровую графику и гейм-дизайн на основе технологии Unreal Engine.
Райан Даулинг Сока — технический художник франшизы «Gears of War», он использует Unreal Engine 4 для конструирования систем разрушений, растительности, визуальных эффектов и многого другого.
Клинтон Крамплер, главный художник окружающей среды в Microsoft Studio, был художником в компании Battlecry Studios (Bethesda), KIXEYE и Army Game Studio. Он специализируется на артах окружающей среды и разработке шейдеров.
— Организуйте удобное рабочее пространство для создания игры.
— Импортируйте 3D-модели и отредактируйте меши в Static Mesh Editor.
— Вдохните жизнь в персонажей и монстров c Persona Edito.r
— Создайте игровой мир и разделите его на уровни.
— Сгенерируйте ландшафт и растительность c Foliage System.
— Настройте правильные материалы и освещение.
— Добавьте звук с Unreal Sound Cue Editor.
— Настройте идеальную симуляцию физических процессов Unreal.
— Реализуйте адекватное взаимодействие с игроком c UMG UI Designer.
— Спроектируйте событийно-управляемый сценарий c Blueprint.
— Настройте систему спавна акторов.
— Оптимизируйте игру для мобильных устройств.
— Подготовьте игру к развёртыванию.
«Авторы в сжатой форме самоучителя предложили замечательное и емкое пособие для быстрого старта по разработке компьютерных игр в Unreal Engine 4. Уроки подробны, прекрасно иллюстрированы и спроектированы в лучших традициях практикумов, а тематические эксперименты, вопросы и задачи делают книгу настоящей находкой». — Ольга Максименкова, к.т.н., научно-учебная лаборатория интеллектуальных систем и структурного анализа факультета компьютерных наук НИУ ВШЭ
Как разрабатывать игры в Unreal Engine
Unreal Engine — популярный и широко используемый игровой движок, разработанный Epic Games. Многие современные игры AAA, такие как Fortnite, Rocket League и Star Wars Jedi: Fallen Order, были созданы с использованием этого игрового движка. Очень большие игровые студии, имя которых мы часто слышим, используют игровой движок Unreal Engine. Кроме того, не только игровая индустрия, но и архитектурная и киноиндустрия часто выигрывают от графической мощи Unreal Engine.
Некоторое время назад был анонсирован Unreal Engine 5. Однако эта версия в настоящее время находится на стадии тестирования. Вот почему мы будем использовать версию Unreal Engine 4.27.0 в наших примерах в этом руководстве.
Прочитано: Основы разработки игр.
Зачем разрабатывать игры на Unreal Engine?
С помощью Unreal Engine вы можете разрабатывать проекты для многих сред, включая ПК, PlayStation, XBox, Nintendo Switch, iOS и Android. Unreal Engine широко используется в игровой индустрии, поскольку обеспечивает гибкость работы между различными платформами.
В то же время, благодаря системе Blueprint Visual Scripting, вы можете разрабатывать игры, даже не написав ни одной строчки кода. Однако более опытные разработчики обычно предпочитают язык C++. Unreal Engine, где вы можете разрабатывать игры с двумя разными системами, также выходит на первый план с этой функцией.
Включая в себя мощные возможности для сложных сцен и эффектов, Unreal Engine является отличным игровым движком для художников. Использование всех этих функций может показаться сложным на первый взгляд. Однако вы можете за короткое время освоить этот игровой движок, меняя параметры, пока не найдете то, что ищете.
Помимо всех этих функций, Unreal Engine имеет огромное сообщество . Разработчики Unreal Engine любят поддерживать друг друга. Вы можете найти ответы на свои вопросы, присоединившись к этим сообществам. При этом документация на собственном официальном сайте Unreal Engine подготовлена очень подробно. Это отличный ресурс, где вы можете найти ответы на большинство вопросов, которые могут возникнуть при разработке или создании видеоигр.
Конечно, самое главное, вы можете получить все это бесплатно. Самым большим преимуществом Unreal Engine является то, что его можно использовать совершенно бесплатно. Являетесь ли вы разработчиком игр-любителей или владеете отличной студией разработки игр AAA, Unreal Engine ничего с вас не возьмет. Вместо этого они взимают только 5% от вашего дохода от ваших игр.
В Unreal Engine также есть отличные инструменты, которые упрощают создание виртуальной или дополненной реальности. Технологии виртуальной реальности значительно улучшились за последние годы. Таким образом, вы можете легко создавать контент для таких платформ, как Oculus Rift и HTC Vive.
Unreal Engine использует широко распространенный рабочий процесс PBR (физически обоснованный рендеринг) для материалов и возможностей рендеринга. Таким образом, вы можете создавать фотореалистичные виды в режиме реального времени. Кроме того, реализм можно поддерживать на самом высоком уровне с помощью технологии трассировки лучей.
Теперь, когда мы немного узнали об удивительных возможностях Unreal Engine, давайте вместе окунемся в мощный мир программирования видеоигр.
Как установить Unreal Engine
Unreal Engine предъявляет определенные требования к оборудованию и программному обеспечению. Во-первых, давайте посмотрим, каковы эти системные требования.
Рекомендуемые требования к программному и аппаратному обеспечению
Ниже приведены некоторые требования к программному и аппаратному обеспечению для установки Unreal Game Engine:
- Операционная система: Windows 10 (64-разрядная)
- Процессор: четырехъядерный Intel/AMD, 2,5 ГГц или выше
- Память: 8 ГБ ОЗУ
- Графика: графическая карта, совместимая с DirectX 11 или 12
Вот некоторые аппаратные функции, необходимые для запуска двигателя. Для разработки игр с Unreal Engine вам также необходимо иметь некоторые функции программного обеспечения, в том числе:
- Если вы будете программировать игры с помощью Unreal Engine 4, Visual Studio 2015, к сожалению, больше не поддерживается.
- Вам необходимо использовать Visual Studio 2017 версии 15.6 и выше или Visual Studio 2019.
- Если вы планируете кодировать игры для операционной системы iOS, iTunes 12 или более поздней версии будет достаточно.
Unreal Engine установлен с различными компонентами DirectX и пакетами Visual C++. Когда вы устанавливаете Unreal Engine через программу запуска Epic Games, программа запуска автоматически устанавливает для вас эти необходимые пакеты.
Теперь мы можем перейти к процессу установки.
Установка с помощью Epic Games Launcher
Epic Games Launcher — отличный инструмент для загрузки и установки игр, ресурсов и игрового движка Unreal Engine из Epic Store.
Чтобы установить этот Launcher, вам необходимо выполнить следующие шаги:
- Перейдите на официальную страницу загрузки Unreal Engine.
- Здесь вы увидите два разных варианта лицензии. Вот что они означают:
- Издательская лицензия: если вы хотите создавать игры, эта лицензия для вас.
- Creators License: Unreal Engine используется не только для разработки игр. Он широко используется в кино, архитектуре и даже в технике. Если вы планируете производить контент вне игры, вы можете выбрать эту лицензию.
- Вы можете начать процесс загрузки, нажав кнопку «Загрузить сейчас» под
- Тип лицензии, который вам подходит.
- После завершения загрузки вы можете запустить ее.
В процессе загрузки вы можете получать предупреждения, такие как одобрение безопасности и разрешение администратора. Это предупреждения, которые будут различаться в зависимости от вашей операционной системы. Вам не нужно беспокоиться; предоставить необходимые разрешения и продолжить. В то же время Unreal Engine может установить эту и другие подобные программы, например DirectX.
Создание учетной записи Epic Games
После установки программы запуска Epic Games вам будет предложено войти в систему. Если у вас есть учетная запись, войдите в нее. Если у вас нет учетной записи, нажмите «Зарегистрироваться» и зарегистрируйтесь.
Epic Games поддерживает множество различных типов регистров. Вы можете зарегистрироваться с любым из этих вариантов.
После создания учетной записи вы можете войти в программу запуска Epic Games и нажать «Войти» .
Установка Unreal Engine
На данном этапе у нас есть все требования для установки Unreal Engine. Далее следует установить этот великолепный игровой движок. Теперь, когда вы вошли в программу запуска Epic Games, вы готовы установить Unreal Engine.
Для этого выполните следующие действия:
- Вы увидите вкладку «Unreal Engine» в интерфейсе Epic Games Launcher.
- Далее нажмите кнопку «Установить движок» в правом верхнем углу.
- Вам нужно выбрать адрес, на который будет установлен Unreal Engine. Конечно, это необязательно, но если вы хотите изменить это, вы можете нажать кнопку «Обзор» .
- Unreal Engine поставляется с множеством различных компонентов, в том числе: Starter Content , Templates and Feature Packs , Engine Source , Core Components и Editor Symbols for Debugging . Однако обратите внимание, что вы можете отредактировать их позже. Вам не нужно беспокоиться об этом прямо сейчас.
- После выбора необходимых компонентов можно нажать кнопку «Применить» .
- Теперь вы можете нажать кнопку «Установить» . Этот процесс может занять много времени в зависимости от скорости вашего интернета и технических характеристик системы.
- После завершения установки вы увидите кнопку «Запуск» . Поздравляем! Нажав эту кнопку, вы можете шагнуть в мир Unreal Engine.
Как создавать проекты с Unreal Engine
Для создания проекта Unreal Engine, прежде всего, вам необходимо открыть программу, щелкнув опцию «Запуск» в части, которую вы видите на картинке.
После запуска игрового движка появится интерфейс как на картинке. Как мы уже упоминали, Unreal Engine используется не только для разработки игр. Если вас интересуют другие отрасли помимо разработки игр, вы также можете изучить другие варианты. Тем не менее, мы будем говорить об этой области, поскольку мы концентрируемся на разработке игр.
Здесь вы можете выбрать «Игры» для игрового проекта и нажать «Далее» .
На следующей странице Unreal Engine представит вам множество готовых проектов. Вы можете сделать все сами, создав пустой проект отсюда, а можете выбрать подходящий вам проект, чтобы выполнить часть своей работы быстрее. После выбора соответствующего проекта можно перейти к следующему шагу, нажав кнопку «Далее» .
Эта последняя страница содержит некоторые важные детали. В функции сценария, которую мы будем использовать, вы можете выбрать, хотите ли вы Blueprint или C++. На этой странице вы можете выбрать нужный вариант графики, функцию трассировки лучей, целевую платформу и начать ли со стартового контента.
Если вы не доверяете мощности своей видеокарты, вам не нужно выбирать параметры Raytracing и Maximum Quality. Это повлияет на производительность Unreal Engine.
Когда ваш проект создан, игровой движок отображается с параметром изображения по умолчанию. Когда вы впервые открываете свой проект с Unreal Engine, вы можете получить доступ к краткому руководству по Unreal Engine, щелкнув значок «синяя шляпа» в правом верхнем углу. Благодаря этому обучению вы сможете изучить функции сцен, которые появляются при первом открытии вашего проекта.
Представляем мощный и удобный интерфейс Unreal Engine. Здесь вы можете управлять каждым файлом, материалом и объектом вашего проекта.
Интерфейс Unreal Engine
Вы можете настроить интерфейс Unreal Engine по своему усмотрению. Для простоты мы сосредоточимся на интерфейсе по умолчанию.
Если бы нам нужно было определить области, которые вы видите здесь, они включают:
- Панель вкладок и строку меню
- Панель инструментов
- Место актера/режимов
- Окна просмотра
- Контент-браузер
- Планировщик мира
- Детали
Панель вкладок Unreal Engine
Панель вкладок — это область, в которой создаются вкладки для редактируемого окна. Он работает как веб-браузер. Он предоставляет вам быструю систему управления.
Строка меню Unreal Engine
Здесь много команд, связанных с вашим проектом. Вы можете выполнять работу по управлению Unreal Engine здесь. Чтобы узнать, что он содержит, полезно изучить немного больше здесь. Наведите указатель мыши на интересующий вас товар и прочитайте описание.
Панель инструментов Unreal Engine
Здесь вы найдете элементы, которые будете использовать чаще всего. Здесь находится кнопка «Играть» , которую вы можете использовать для предварительного просмотра вашей игры.
Unreal Engine Viewport
Это область, которую мы будем использовать больше всего при разработке игр. Это область мира, которую вы создадите, и область игры. Вы можете перемещаться внутри, щелкнув правой кнопкой мыши и используя клавиши WASD .
Детали Unreal Engine
На этой панели вы можете увидеть всю информацию о текущем элементе. Например, стул справа на фотографии выше выбран, и вы можете увидеть информацию о местоположении стула на панели сведений.
Заодно сюда можно добавить функции рендеринга, освещения и, самое главное, компоненты и скрипты.
Unreal Engine World Outliner
Здесь вы найдете всех актеров, присутствующих в вашей игровой сцене. Вместо того, чтобы искать актеров на игровом поле, вы можете выбрать их здесь и внести необходимые изменения.
Освоение всего интерфейса зависит от опыта и времени. Для этого следует постараться разработать множество проектов. Это лучший способ получить опыт работы с Unreal Engine.
Unreal Engine Программирование игр и сценарии
Unreal Engine поставляется с двумя вариантами сценариев: Blueprint и C++.
Во-первых, давайте поговорим о том, что такое Blueprint . Blueprint — это визуальный язык программирования Unreal Engine. Система Blueprint построена на C++. Таким образом, вы можете передать нужный код из C++ в Blueprint. Так же возможно и обратное.
Чертеж идеально подходит для создания различных прототипов. Длительное время компиляции C++ и сложные настройки делают процесс довольно долгим. Тем не менее, после изучения логики Blueprint довольно легко освоиться.
Если у вас нет предыдущего опыта разработки на C++, это может быть довольно сложно. Blueprint намного проще в освоении, так как он имеет возможность перетаскивания. Благодаря Blueprint вы можете изучать переменные, классы и функции за гораздо более короткое время. После этого будет легче приступить к изучению C++.
Blueprint работает довольно быстро в зависимости от вашего проекта. Однако большое количество циклов и повышенная сложность структур внутри этих циклов могут вызвать проблемы с производительностью. Вместо разработки сложных проектов с помощью Blueprint использование C++ и Blueprint сэкономит время и силы.
Если нам нужно поговорить о том, как работает функция сценариев, лучше всего ее можно описать следующим образом. Мы говорили о панели World Outliner . Предположим, что в этой панели есть 2 кубика. Мы хотим, чтобы один из кубиков постоянно двигался влево-вправо, а другой двигался игроком. Наша цель в игре — попасть в постоянно движущийся куб.
Сейчас нам нужно подумать о нашем пути. Для этого нам нужно выбрать один из кубов в панели World Outliner и добавить к нему скрипт Blueprint или C++. Предположим, мы разрабатываем на C++. Мы должны закодировать команды движения, необходимые для этого куба, и команды ввода, которые должен вводить игрок. Наш первый куб готов к перемещению.
Мы должны добавить сценарий C++ к другому нашему кубу и написать код, чтобы он мог непрерывно перемещаться влево и вправо.
Наконец, нам нужен скрипт для отслеживания системы столкновений. Мы можем добавить это куда угодно. Потому что мы сможем вызывать его из любого места, которое добавим. Внутри этого скрипта будет код, который будет отслеживать столкновение обоих кубов. Если оба куба находятся в одной координате, мы можем составить правило типа «уничтожить один из кубов» или «добавить 10 очков к счету». Что происходит, полностью зависит от разработчика.
Это простой пример, но я уверен, что вы понимаете, как использовать функцию сценариев.
Разработка игр в Unreal Engine
В этом руководстве по разработке игр вы узнали, как установить Unreal Engine, как начать новый игровой проект, а также о различиях между Blueprint и C++. В то же время вы узнали об интерфейсе Unreal Engine.
Разработка игр — это область, требующая много тяжелой работы и опыта. Unreal Engine — действительно успешный игровой движок в этой области. Выбор этого движка для разработки — отличное решение. Но впереди вас ждет долгий и увлекательный путь в вашем приключении для разработчиков игр.
Обязательно ознакомьтесь с документацией на официальном сайте Unreal Engine. Здесь вы найдете различные демонстрационные проекты, структуры Blueprint, алгоритмы C++ и многое другое. Изучите такие функции, как Sharing , Rendering и Raytracing .
Последние сообщения
Похожие истории
Как создать простую игру в Unreal Engine 4
В этом руководстве по Unreal Engine 4 вы создадите бесконечную игру от первого лица.
Вы научитесь генерировать случайные препятствия и перезапускать игру.Если вы только начинаете разрабатывать игры, один из распространенных советов — создать простую игру. Это потому, что он учит вас, как создавать простую механику и как объекты взаимодействуют друг с другом.
В этом уроке вы создадите игру от первого лица, которая будет продолжаться бесконечно. Вы узнаете, как:
- Непрерывно перемещать игрока вперед
- Создавать препятствия, которых игрок должен избегать
- Рандомизируйте препятствия для создания вариаций
- Создайте кнопку перезапуска, которая отображается, когда игрок сталкивается с препятствием
В конце у вас будет игра, которая выглядит следующим образом:
Обратите внимание, что в этом уроке вы будете использовать Blueprints и UMG. Если вам нужно освежить знания, ознакомьтесь с нашим руководством по Blueprints and UI.
Примечание: Это руководство является частью серии из 10 руководств по Unreal Engine:
- Часть 1: Начало работы
- Часть 2: Чертежи
- Часть 3: Материалы
- Часть 4: пользовательский интерфейс
- Часть 5: Как создать простую игру (вы здесь!)
- Часть 6: Анимация
- Часть 7: Аудио
- Часть 8: Системы частиц
- Часть 9: Искусственный интеллект
- Часть 10: Как создать простой FPS
Начало работы
Загрузите начальный проект и разархивируйте его. Перейдите в папку проекта и откройте InfiniteMatrix.upproject .
Примечание: Если вы получили сообщение о том, что проект был создан в более ранней версии редактора Unreal, это нормально (движок часто обновляется). Вы можете либо выбрать вариант открытия копии, либо вариант преобразования на месте.
Нажмите Играйте , чтобы проверить управление движением. Вы можете перемещаться по вертикали и горизонтали, перемещая мышь .
Первое, что вы должны сделать, это заставить игрока непрерывно двигаться вперед.
Перемещение игрока вперед
Перейдите к папке Blueprints и откройте BP_Player .
Чтобы переместить игрока вперед, вы будете добавлять смещение к местоположению игрока в каждом кадре.
Во-первых, вам нужно создать переменную для определения скорости движения игрока вперед. Создайте переменную Float с именем ForwardSpeed и установите для нее значение по умолчанию 2000 .
Затем убедитесь, что вы находитесь в графике событий, а затем найдите Событие Тик узел. Создайте следующую настройку:
Умножив ForwardSpeed на Delta Seconds , вы получите независимый от частоты кадров результат .
Примечание: Если вы не знакомы с независимостью частоты кадров, прочтите наше руководство по Blueprints. Мы расскажем об этом в разделе о независимости частоты кадров .
Далее вы будете использовать этот результат для перемещения игрока по одной оси.
Перемещение по одной оси
Чтобы переместить игрока, создайте узел AddActorWorldOffset . Установите Sweep на true , щелкнув левой кнопкой мыши его флажок .
Если вы попытаетесь соединить результат Float с входом Delta Location , Unreal автоматически преобразует его в Vector .
Однако это поместит значение с плавающей запятой в компоненты X, Y и Z вектора. Для этой игры движение вперед должно быть только по Ось X . К счастью, вы можете разделить вектор на три компонента Float .
Убедитесь, что контакт Delta Location узла AddActorWorldOffset не имеет соединений. Щелкните правой кнопкой мыши штифт Delta Location и выберите Split Struct Pin .
Наконец, подключите все так:
Подведем итоги:
- Каждый кадр игра будет умножаться ForwardSpeed и Delta Seconds , чтобы получить результат, не зависящий от частоты кадров
- AddActorWorldOffset будет использовать результат для перемещения игрока по оси X
- Поскольку Развертка включена, игрок перестанет двигаться вперед, если что-то заблокирует его
Нажмите Скомпилируйте и вернитесь в главный редактор. Если вы нажмете Играть , вы пройдете через туннель.
Вместо того, чтобы размещать туннели вручную, вы можете создать чертеж, который создаст туннели автоматически.
Создание генератора туннелей
Перейдите в Content Browser и убедитесь, что вы находитесь в папке Blueprints . Создайте новый класс Blueprint с Актером в качестве родительского класса. Назовите его BP_TunnelSpawner и откройте его.
Так как игра будет постоянно создавать туннели, рекомендуется создать функцию для создания спауна . Перейдите на панель My Blueprint и создайте новую функцию с именем SpawnTunnel . Целью этой функции будет создание туннеля в указанном месте.
Чтобы передать местоположение функции, ей требуется входной параметр . Они будут отображаться как входные контакты при вызове функции.
Они также появятся в качестве выходных контактов на Entry узле функции.
Давайте продолжим и создадим входной параметр. Убедитесь, что вы находитесь на графике функции SpawnTunnel . Выберите узел Entry и перейдите на панель Details. Нажмите 9Знак 0344 + рядом с разделом Inputs .
Переименуйте входной параметр в SpawnLocation и измените его тип на Vector .
Чтобы создать туннель, добавьте узел Spawn Actor From Class . Щелкните раскрывающийся список , расположенный справа от контакта Class , и выберите BP_Tunnel .
Чтобы установить место появления, щелкните правой кнопкой мыши Преобразование появления и выберите Штифт разъемной конструкции . После этого свяжите узел Spawn Actor From Class с узлом Entry следующим образом:
Теперь всякий раз, когда вы вызываете функцию SpawnTunnel , она будет создавать экземпляр BP_Tunnel в указанном месте.
Давайте проверим!
Тестирование генератора туннелей
Переключитесь на график событий и найдите узел Event BeginPlay . Добавьте SpawnTunnel и подключите его к узлу Event BeginPlay .
На узле SpawnTunnel установите для параметра Spawn Location значение (2000, 0, 500) .
Теперь, когда игра начинается, она создает туннель вверх и в сторону от игрока. Нажмите Compile и вернитесь в главный редактор.
Сначала удалите BP_Tunnel с уровня. Сделайте это, щелкнув левой кнопкой мыши на BP_Tunnel в World Outliner. После этого нажмите Удалить ключ , чтобы удалить его с уровня.
Затем перейдите в Content Browser. Щелкните левой кнопкой мыши и перетащите BP_TunnelSpawner в окно просмотра. Это добавит его экземпляр на уровень.
Если вы нажмете Играть , игра создаст туннель над игроком и вдали от него.
После завершения тестирования вернитесь к BP_TunnelSpawner . Сброс места появления из SpawnTunnel 9узел 0345 до (0, 0, 0) .
После этого нажмите Compile и вернитесь в главный редактор.
В следующем разделе вы настроите функциональность для BP_Tunnel .
Настройка схемы туннеля
BP_Tunnel будет отвечать за две вещи. Первый определяет, когда игра должна создать новый туннель. Для этого вы создадите триггерную зону. После запуска BP_Tunnel сообщит BP_TunnelSpawner , чтобы создать новый туннель. Делая это, вы можете создать иллюзию бесконечного туннеля.
Второе, что он сделает, это определит точку появления. BP_TunnelSpawner будет использовать эту точку в качестве следующего места появления.
Начнем с создания триггерной зоны.
Создание триггерной зоны
Откройте BP_Tunnel и перейдите на панель «Компоненты». Добавьте компонент Box Collision и назовите его TriggerZone 9.0345 .
Область столкновения на данный момент довольно мала. Перейдите на панель Details и найдите раздел Shape . Задайте для свойства Box Extent значение (32, 500, 500) .
Затем установите для свойства Location значение (2532, 0, 0) . Это поместит TriggerZone прямо в конец сетки туннеля. Это означает, что новый туннель должен появляться только тогда, когда игрок достигает конца туннеля.
Теперь пришло время создать точку появления
Создание точки появления
Чтобы определить местоположение точки появления, вы можете использовать компонент Scene . Эти компоненты идеально подходят для определения местоположений, потому что они содержат только Transform. Они также видны в окне просмотра, поэтому вы можете видеть, где находится ваша точка возрождения.
Перейдите на панель «Компоненты» и убедитесь, что ничего не выбрано. Добавьте компонент Scene и переименуйте его в 9.0344 Точка появления .
Сетка туннеля имеет длину 2500 единиц по оси X , так что именно там должна быть точка присоединения. Перейдите на панель Details и задайте для свойства Location значение (2500, 0, 0) .
Следующее, что нужно сделать, это создать функцию, которая порождает туннель в SpawnPoint .
Нерестовые туннели в точке возрождения
Нажмите Скомпилируйте и затем переключитесь на BP_TunnelSpawner .
Следующий BP_Tunnel должен появиться в SpawnPoint самого дальнего туннеля . При этом туннель всегда будет продолжаться.
Поскольку самый дальний туннель всегда является последним созданным туннелем, вы можете легко получить ссылку на него.
Откройте график для SpawnTunnel . Щелкните правой кнопкой мыши на выводе Return Value узла Spawn Actor From Class . Выберите Повысьте уровень до переменной и переименуйте переменную в NewestTunnel .
Теперь у вас всегда будет ссылка на самый дальний туннель.
Затем создайте новую функцию и назовите ее SpawnTunnelAtSpawnPoint . Создайте следующий график:
Эта установка получит новейший туннель и расположение его компонента SpawnPoint . Затем в этом месте появится новый туннель.
Для заказа BP_Tunnel для связи с BP_TunnelSpawner , ему нужна ссылка. Без связи BP_TunnelSpawner не будет знать, когда создавать следующий туннель.
Создание ссылки на генератор туннелей
Нажмите Компилировать и затем закройте граф SpawnTunnelAtSpawnPoint . После этого переключитесь на BP_Tunnel .
Добавьте новую переменную и назовите ее TunnelSpawner . Установите его тип переменной на BP_TunnelSpawner\Object Reference .
Нажмите Compile и затем переключитесь обратно на BP_TunnelSpawner .
Откройте граф для SpawnTunnel и добавьте указанные узлы:
Теперь каждый туннель будет иметь ссылку на BP_TunnelSpawner .
Затем вы указываете BP_TunnelSpawner создавать следующий туннель, когда игрок входит в TriggerZone .
Сценарий триггерной зоны
Нажмите Скомпилируйте и затем переключитесь на BP_Tunnel .
Перейдите на панель «Компоненты» и щелкните правой кнопкой мыши на TriggerZone . Выберите Добавить событие\Добавить OnComponentBeginOverlap . Это добавит следующий узел в ваш график событий:
Этот узел будет выполняться всякий раз, когда другой Актер перекрывает TriggerZone .
Во-первых, вы должны проверить, не перекрывается ли Актер , который перекрывает TriggerZone — игрок.
Щелкните левой кнопкой мыши и перетащите Другой актер булавку. Отпустите , щелкните левой кнопкой мыши в пустой области и выберите в меню Cast to BP_Player .
Примечание: Поскольку туннель появляется на конце другого туннеля, он активирует TriggerZone этого туннеля. Приведение к BP_Player предотвратит выполнение любых дальнейших узлов, если Other Actor является туннелем.
Затем добавьте указанные узлы после узла Cast to BP_Player :
Давайте рассмотрим это шаг за шагом:
- Узел Overlap (TriggerZone) выполнит
- Узел Cast to BP_Player проверяет, является ли перекрывающийся Актер игроком
- Если это игрок, то BP_TunnelSpawner создаст новый туннель. Его расположение будет на SpawnPoint компонент последнего созданного туннеля.
- Поскольку старый туннель больше не нужен, игра удаляет его с помощью узла DestroyActor .
Щелкните Скомпилируйте , вернитесь в главный редактор и нажмите Воспроизвести . Как только вы достигнете конца туннеля, игра создаст новый.
Хотя игра бесконечно порождает туннели, она не выглядит бесконечной. Вы можете смягчить это, всегда имея несколько видимых туннелей. Позже, когда вы объедините это с препятствиями, игрок не сможет видеть появляющиеся туннели.
Создание большего количества туннелей
Первое, что нужно сделать, это создать функцию, которая создает определенное количество туннелей.
Откройте BP_TunnelSpawner и создайте новую функцию с именем SpawnInitialTunnels .
Чтобы создать указанное количество туннелей, вы можете использовать узел ForLoop . Этот узел будет выполнять подключенные узлы заданное количество раз. Добавьте узел ForLoop и подключите его к узлу Entry .
Чтобы узел ForLoop выполнял n количество раз, вам нужно установить Last Index на n – 1 .
В этом уроке вы создадите три туннеля. Чтобы выполнить три цикла, установите для параметра Last Index значение 2 .
Примечание: Если вы не установите поля First Index или Last Index , по умолчанию они будут равны 0
Когда игра начинается, игрок всегда должен начинать в туннеле. Для этого можно заспавнить первый туннель в локации игрока.
Создание первого туннеля
Чтобы определить, был ли создан первый туннель, вы можете проверить, установлен ли параметр NewestTunnel . Если он не установлен, это означает, что первый туннель не создан. Это связано с тем, что NewestTunnel имеет значение только после того, как игра порождает туннель.
Чтобы выполнить эту проверку, добавьте узел IsValid (со значком вопросительного знака) после узла ForLoop .
Далее получаем ссылку на NewestTunnel и подключите его к контакту Input Object узла IsValid .
Если NewestTunnel не установлен, будет выполняться вывод Is Not Valid , и наоборот.
Добавьте следующее и подключите его к выводу Is Not Valid узла IsValid :
Эта установка создаст туннель в месте расположения пешки игрока.
Далее вы создадите последующие туннели.
Создание последующих туннелей
Добавьте узел SpawnTunnelAtSpawnPoint и подключите его к контакту Is Valid узла IsValid .
Вот окончательный график:
Сводка:
- Узел ForLoop будет выполняться три раза
- В первом цикле он создаст туннель в месте, где находится игрок.
- Во время последующих циклов он создаст туннель на SpawnPoint новейшего туннеля
Далее перейдите в Event Graph и удалите узел SpawnTunnel . После этого добавьте узел SpawnInitialTunnels после Event BeginPlay .
Теперь при запуске игры появляются три туннеля.
Щелкните Скомпилируйте , вернитесь в главный редактор и нажмите Воспроизвести . Туннель стал намного длиннее!
На данный момент игра не очень сложная, поэтому давайте добавим несколько препятствий.
Создание препятствий
Вот сетки, которые вы будете использовать в качестве препятствий:
Откройте BP_Tunnel и перейдите на панель компонентов. Добавьте компонент Static Mesh и назовите его WallMesh .
Перейдите на панель Details и измените свойство Static Mesh на SM_Hole_01 .
Затем установите для свойства Location значение (2470, 0, 0) . Это поместит его в конец туннеля.
Чтобы сделать игру более интересной, стены также будут вращаться. Добавьте новую переменную Float и назовите ее RotateSpeed . Установите значение по умолчанию на 30 .
Переключитесь на график событий и найдите узел Event Tick . Создайте следующую настройку:
Это заставит WallMesh вращаться каждый кадр на указанную величину.
Нажмите Скомпилируйте и вернитесь в главный редактор. Нажмите Сыграйте , чтобы увидеть вращающиеся стены.
Давайте оживим его, добавив несколько вариантов стен.
Создание вариантов стен
Вместо того, чтобы создавать новый чертеж для каждого варианта, вы можете просто рандомизировать WallMesh .
Откройте BP_Tunnel и создайте новую функцию с именем RandomizeWall . После этого создайте следующий график:
Как следует из названия, Set Static Mesh 9Узел 0345 установит WallMesh на предоставленную сетку.
Чтобы составить список статических мешей, вы можете использовать узел Select .
Щелкните левой кнопкой мыши и перетащите булавку New Mesh . Отпустите , щелкните левой кнопкой мыши в пустой области, а затем добавьте узел Select .
Узел Select позволяет установить список опций. Вход Index определяет, какой вариант Select 9Выходы узла 0345.
Поскольку доступно четыре сетки стен, вам необходимо создать еще два штифта Option . Вы можете сделать это, щелкнув правой кнопкой мыши узел Select и выбрав Add Option Pin . Делайте это до тех пор, пока у вас не будет четырех дополнительных контактов .
Затем установите для каждой опции следующие значения:
- Опция 0: SM_Hole_01
- Вариант 1: SM_Hole_02
- Вариант 2: SM_Hole_03
- Вариант 3: SM_Hole_04
Теперь давайте выберем случайный вариант.
Рандомизация стены
Вы можете использовать узел Random Integer in Range для получения случайного числа. Этот узел вернет значение >= Min и <= Max .
Добавьте узел Random Integer in Range и подключите его к контакту Index узла Select .
Установите для параметра Max значение 3 . Это даст вам четыре возможных числа: 0, 1, 2 и 3.
Чтобы создать немного больше рандомизации, давайте добавим случайное вращение к WallMesh . Добавьте следующее после узла Set Static Mesh :
Это добавит случайное вращение между 0 и 360 градусов до WallMesh .
Вот окончательный график:
Сводка:
- Узел Select предоставляет список сеток
- Случайная сетка выбирается с использованием узла Random Integer in Range .
- Узел Set Static Mesh устанавливает WallMesh на выбранную сетку
- Узел AddLocalRotation добавляет случайное смещение вращения к WallMesh
Нажмите Компилировать и затем закройте график RandomizeWall .
Переключитесь на BP_TunnelSpawner и откройте график SpawnTunnel . Добавьте выделенный узел:
Теперь всякий раз, когда появляется туннель, он будет иметь случайный меш стены.
Закройте график SpawnTunnel и нажмите Compile . Вернитесь в главный редактор и нажмите Играть , чтобы увидеть все варианты стен!
Если вы ударитесь о стену, вы перестанете двигаться вперед. Однако, если вы переместитесь и пройдете через дыру, вы снова начнете двигаться вперед.
Следующим шагом будет отключение движения вперед при столкновении игрока со стеной.
Обработка столкновений со стенами
Чтобы разрешить или запретить движение вперед, вы можете использовать булеву переменную . У них всего два состояния: true и false .
Откройте BP_Player и затем создайте новую логическую переменную с именем IsDead .
Далее перейдите к узлу Event Tick и создайте Branch узел.
После этого получите ссылку на IsDead и подключите ее к выводу Condition узла Branch .
Соедините узел Event Tick с узлом Branch . После этого подключите контакт False узла Branch к узлу AddActorWorldOffset .
Теперь, когда IsDead установлено на true , игрок перестанет двигаться вперед.
Далее установим переменную IsDead , когда игрок ударяется о стену.
Установка переменной IsDead
Нажмите Compile и затем переключитесь на BP_Tunnel . На панели Components щелкните правой кнопкой мыши на WallMesh и выберите Add Event\Add OnComponentHit . Это добавит следующий узел в ваш график событий:
Этот узел будет выполняться всякий раз, когда другой Актер сталкивается с Стеновая сетка .
Во-первых, вам нужно проверить, является ли Актер , столкнувшийся с WallMesh , игроком.
Щелкните левой кнопкой мыши и перетащите Другой актер булавку. Отпустите , щелкните левой кнопкой мыши в пустой области и выберите в меню Cast to BP_Player .
Затем щелкните левой кнопкой мыши и перетащите вывод BP_Player узла Cast на узел BP_Player . Выпуск щелкните левой кнопкой мыши на пустом месте, а затем добавьте узел Set Is Dead .
Установите IsDead на true , щелкнув левой кнопкой мыши флажок .
Нажмите Скомпилируйте и вернитесь в главный редактор. Нажми Играй и попробуй врезаться в стену. Если вы переместитесь к дыре, вы больше не сможете пройти через нее.
В следующем разделе вы увидите кнопку перезапуска, когда игрок ударяется о стену.
Отображение кнопки перезапуска
Отображаемый виджет называется WBP_Restart . Вы можете найти его в папке UI . Вот как это выглядит:
Чтобы отобразить или скрыть виджет, вам нужна ссылка на него. Откройте BP_Player , а затем создайте новую переменную с именем RestartWidget . Измените тип переменной на WBP_Restart\Object Reference .
Затем перейдите к графику событий и найдите Событие BeginPlay узел.
Добавьте узел Create Widget и установите для Class значение WBP_Restart .
После этого добавьте узел Set Restart Widget , а затем соедините все так:
Теперь, когда игрок появится, он создаст экземпляр WBP_Restart . Следующим шагом будет создание функции, отображающей этот экземпляр.
Создание функции отображения
Создайте новую функцию и назовите ее DisplayRestart . Сделав это, создайте следующий график:
Итог:
- Добавление в область просмотра покажет RestartWidget на экране
- Установить только пользовательский интерфейс режима ввода ограничит взаимодействие игрока пользовательским интерфейсом. Это сделано для того, чтобы игрок не мог двигаться, пока он мертв.
- Как следует из названия, Set Show Mouse Cursor просто отображает курсор мыши
Чтобы отобразить кнопку перезагрузки, все, что вам нужно сделать, это вызвать DisplayRestart после столкновения игрока со стеной.
Вызов функции отображения
Закройте график DisplayRestart и нажмите Compile .
Переключитесь на BP_Tunnel и затем найдите узел On Component Hit (WallMesh) .
Добавьте узел DisplayRestart в конец цепочки узлов.
Нажмите Скомпилируйте и затем закройте BP_Tunnel . Вернитесь в главный редактор и нажмите Play . Если вы ударитесь о стену, появится кнопка перезапуска.
Последний шаг — перезапуск игры, когда игрок нажимает кнопку.
Перезапуск игры
При перезапуске игра должна сделать две вещи:
- Сбросить плеер. Это включает удаление кнопки перезагрузки с экрана.
- Возродить туннели. Таким образом, игрок начинает с начала туннеля.
Начнем со сброса плеера.
Сброс проигрывателя
Откройте BP_Player и затем создайте новую функцию с именем RestartGame . Создайте следующий график:
Сводка:
- Set Is Dead устанавливает IsDead от до false . Это снова позволяет двигаться вперед.
- Remove From Parent удаляет RestartWidget с экрана
- Установить режим ввода только для игры снова включает игровой ввод, чтобы игрок мог перемещаться
- Set Show Mouse Cursor скрывает курсор мыши
Теперь давайте возродим туннели.
Возобновление туннелей
Щелкните Скомпилируйте и затем закройте BP_Player .
Откройте BP_TunnelSpawner и убедитесь, что вы находитесь в графе SpawnInitialTunnels .
Во-первых, вам нужно удалить существующие туннели, прежде чем создавать новые.
Добавьте узел Sequence после узла Entry . Подключите Затем 1 контакт к узлу ForLoop .
Примечание: Узел Sequence выполняет свои выходные данные в последовательном порядке. Это отличный способ организовать график по вертикали, тем более что цепочки узлов могут быть очень длинными.
Затем создайте следующие узлы:
Эта установка позволит получить все существующие туннели и удалить их из игры.
Наконец, подключите контакт Then 0 узла Sequence к узлу Get All Actors of Class . Это гарантирует, что туннели будут удалены до процесса нереста.
Вот окончательный график:
Последнее, что нужно сделать, это обработать нажатие кнопки.
Обработка нажатий кнопок
Щелкните Скомпилируйте и затем закройте BP_TunnelSpawner .
Перейдите в Content Browser и перейдите к 9Папка 0344 UI . Дважды щелкните на WBP_Restart , чтобы открыть его.
Выберите RestartButton и перейдите на панель сведений. Перейдите в раздел Events и нажмите кнопку рядом с OnClicked .
Это создаст узел с именем On Clicked (RestartButton) . Этот узел будет выполняться, когда игрок нажмет RestartButton .
Воссоздайте следующее:
Сводка:
- Получить пешку-владельца игрока возвращает пешку, которую в данный момент контролирует игрок
- Приведение к BP_Player проверяет, относится ли пешка к классу BP_Player
- Если это так, она вызовет функцию RestartGame . Эта функция сбрасывает плеер и скрывает кнопку перезапуска.
- Get All Actors of Class и Get возвращает BP_TunnelSpawner , а затем вызывает SpawnInitialTunnels . Эта функция удалит существующие туннели и создаст новые.
Примечание: Вам может быть интересно, почему я использовал Get All Actors Of Class вместо ссылки на BP_TunnelSpawner . Основная причина в том, что BP_Tunnel не имеет отношения к WBP_Restart . Для такой простой игры проще использовать описанный выше метод, чем выяснять, где хранить ссылку.