Unreal engine 4 mobile. сборка android проекта + dlc
Содержание:
- Упаковка проекта
- Вступление
- ArtCraft
- Создание туннелей в точке спауна
- Система компонентов (Unity)
- Единицы измерения
- Avenue
- Миф третий: высокие системные требования
- Не используйте общих слов
- Xiaomi, Redmi, POCO
- Установка DLC с использованием Mobile Patching Utilities
- Gamesacademy
- Другие возможности Unreal Engine 5
- Skillbox
- 3 место – Batman: Arkham Asylum
- Один человек сделал реалистичный шутер. Это разве возможно?
- Создание декоратора
- По трейлеру непонятно, что происходит. Что это за игра?
- Концептуальные ловушки
- Бонусы
- Послесловие
- Заключение
Упаковка проекта
Предупреждаю, что часть настроек в созданных профилях пропадает после первого закрытия редактора. Наиболее важная из них — целевой проект.
Подготовка релиз версии
Для публикации приложения в Google Play APK и DLC должны быть собраны в Shipping конфигурации. Мы будем использовать Development для проведения тестирования.
Вы можете посмотреть, что именно попадает в запаковку. Это можно сделать, перейдя в директорию …\AndroidDLC\Saved\Cooked\Android_ETC2.
Подготовка DLC
DLC в Unreal Engine 4 является плагином с контентом. После упаковки он представляет из себя *.pak файл, распространяющийся отдельно от основной сборки игры.
Название не должно содержать специальных символов, потому что редактор не позволит создать плагин с таким названием
Это важное замечание. Однако, вы можете обойти ограничение, создав плагин и изменив название вручную (лучше так не делать)
Тестирование приложения на мобильном устройстве
Перед началом тестирования ваше устройство должно быть подключено к компьютеру и настроено.
Перейдите в директорию Android_Release\App\1.0\Android_ETC2.
Запустите Install_AndroidDLC-arm64.bat и дождитесь окончания установки. Если окно консоли закроется, то установка прошла успешно.
Найдите приложение My Project with DLC и запустите. Откроется Release_Map. Спустя 10 секунд сработает событие перехода на уровень DLC_Map, но этот уровень все еще отсутствует в проекте.
Вступление
Всем привет. Меня зовут Ширшов Владимир и я техлид проекта King’s Bounty 2. Игра разрабатывается на движке Unreal Engine 4.
King’s Bounty 2 — это игра с открытым миром, в котором есть города, поселения, наполненные персонажами, интерактивными объектами и зонами сражений. Персонаж может перемещаться по миру как пешком, так и верхом. Все элементы открытого мира должны помещаться в память, удовлетворять требованиям по производительности и успевать загружаться на всех целевых платформах (PlayStation 4, XBox One, Nintendo Switch), чтобы вокруг игрока всегда были персонажи и детализированные объекты.
Я хочу поделиться опытом использования системы стриминга уровней в Unreal Engine 4 World Composition для создания открытого мира и рассказать об ее плюсах и минусах. Также расскажу о тех изменениях, которые нам потребовалось внести в нее для того, чтобы игра помещалось в память целевых платформ, и уровни успевали загружаться при перемещении игрока по локации.
ArtCraft
Unreal Engine помогает разработчикам и художникам максимально быстро превратить свои задумки в голове в готовый виртуальный мир. На курсе у тебя будет такая возможность! Финальный проект — прототип игры. Ты почувствуешь себя в роли разработчика, презентующего свою идею.
Освоить игровой движок с нуля — сколько на это нужно времени?
Идеальный вариант для всех, кто давно мечтал о создании игр, но не мог разобраться в инструментах.
За 8 недель курса ты научишься создавать оружие, картинку и звуки выстрелов; анимировать атакующих врагов и учитывать урон; создавать игровой интерфейс и уровни-лабиринты.
В итоге ты сможешь создать рабочий прототип игры. А твоим наставником будет лид-разработчик, который выпустил в продажу не одну VR-игру.
ЗАПИШИСЬ НА БЕСПЛАТНОЕ ЗАНЯТИЕ.
Ты подключишься к online лекции, познакомишься с тренером, узнаешь больше об учебной программе и убедишься в высоком уровне преподавания. Согласись, это лучший способ узнать, подходит ли тебе курс.
Создание туннелей в точке спауна
CompileBP_TunnelSpawnerBP_TunnelSpawnPointсамого дальнего
SpawnTunnelНажмите правой клавишей мышиReturn ValueSpawn Actor From ClassPromote to VariableNewestTunnel
SpawnTunnelAtSpawnPoint
SpawnPointBP_TunnelBP_TunnelSpawnerBP_TunnelSpawner
Создание ссылки на спаунер туннелей
CompileSpawnTunnelAtSpawnPointBP_TunnelTunnelSpawnerVariable TypeBP_TunnelSpawner\Object Reference
CompileBP_TunnelSpawnerSpawnTunnel
BP_TunnelSpawnerBP_TunnelSpawnerTriggerZone
Скриптинг зоны триггера
CompileBP_Tunnelнажмите правой клавишейTriggerZoneAdd Event\Add OnComponentBeginOverlap
ActorTriggerZoneActorTriggerZoneПеретащитеOther Actorлевую клавишу мышиCast to BP_Player
Примечание:концеTriggerZoneCast to BP_PlayerOther ActorCast to BP_Player
- Когда Actor касается TriggerZone, выполняется нод On Component Begin Overlap (TriggerZone)
- Нод Cast to BP_Player проверяет, является ли касающийся актор игроком
- Если это игрок, то BP_TunnelSpawner создаст новый туннель. Его местоположение будет находится в компоненте SpawnPoint последнего созданного туннеля.
- Поскольку старый туннель уже не нужен, игра удаляет его с помощью нода DestroyActor
CompilePlayвыглядят
Система компонентов (Unity)
Когда мы запускаем проект на Unreal, то видим, что персонаж в сцене — лишь один объект. В окне World Outliner нет привычных нодов модели (вложенных объектов, мешей), костей скелета и т. д. Это следствие различий систем компонентов Unity и Unreal.
В Unity сцена состоит из объектов типа Game Object. Это пустой универсальный объект, к которому добавляются компоненты, реализованные скриптами поведения (MonoBehaviour) и встроенными компонентами движка. Иногда их оставляют пустыми, в качестве объекта-маркера, на месте которого будет создан, например, игровой персонаж или эффект.
Все эти объекты мы видим в окне Hierarchy в редакторе движка. Они имеют встроенный компонент , с помощью которого мы можем управлять положением объекта в пространстве 3D-сцены. Например, скрипт движения объекта меняет координаты в функции , и объект двигается. Для добавления подобного скрипта на Game Object достаточно двух кликов. Создав объект — персонажа или предмет, — мы его настраиваем, добавляем скрипты и сохраняем в prefab (файл, хранящий Game Object и его дочерние объекты). Впоследствии мы можем менять сам prefab, и эти изменения отразятся на всех подобных объектах.
Вот как выглядит класс , представляющий собой ракету в проекте UShooter.
Мы задаём параметры снаряда в редакторе, при желании меняем скорость перемещения (свойство ) и урон (). Обработка столкновений происходит в функции . Unity сам её вызывает, так как на объекте есть компонент Rigid Body.
Единицы измерения
Для измерения оптимизационных улучшений используются кадры в секунду (эту единицу измерения также называют «фреймрейтом» или «фпс») и миллисекунды на кадр («мс»).
График ниже показывает отношение между средним фреймрейтом и миллисекундами.
Чтобы узнать мс при каком-либо фпс, просто узнаем величину, обратную фпс (т.е. берем 1 и делим ее на фпс), а затем умножаем ее на 1000.
1/ФПС x 1000 = МС
Использование миллисекунд для описания улучшений в производительности позволяет лучше измерить уровень оптимизации, необходимый для достижения целевого фреймрейта.
Вот пара примеров увеличения фпс на 20 кадров в секунду:
- Чтобы поднять фпс с 100 до 120, нужно улучшить результат на 1,66 мс
- Чтобы поднять фпс с 10 до 30, нужно улучшить результат на 66,67 мс
Avenue
Очевидно, что разработка игр одна из самых интересных областей мира IT. Создавать персонажей, анимировать их движения и конечно писать игровую логику. Ваши будни на позиции «Разработчик Игр» точно не будут похожи на рутину!
Unreal Engine имеет исходный код, а значит пользоваться этим движком можно совершенно бесплатно. Кроме этого Unreal Engine имеет огромное сообщество, а это максимально упростит начальных этап входа для молодого специалиста.
Разработчик игр – динамично развивающаяся область программирования. Современный рынок разработки игр нуждается в новых специалистах и новых квалифицированных кадрах. Отсутствие государственного образования в этой сфере формирует огромный недостаток разработчиков, а это значит, что даже начинающий специалиста сможет найти себе работу без особых проблем.
Удобные пакеты для обучения:
- Online
- VIP
- Standart
Миф третий: высокие системные требования
Рабочая конфигурация компьютера у меня выглядит вот так, там куча всего нашпиговано.
Моя вторая рабочая конфигурация выглядит вот так — это коробочка с интегрированной видеокартой, по-моему, Intel 3000.
На ней спокойно можно создавать мобильные игры. Даже некоторые десктопные проекты тянет. Но всё, что связано с обсчётом на CPU, занимает довольно много времени. В частности, если будете обсчитывать освещение или шейдеры.
Но если вы разрабатываете под мобильные устройства, когда вы знаете, что хотите сделать и не экспериментируете с гигантскими шейдерами, этого хватит. Поэтому никаких заоблачных требований к компьютеру нет и не было. Напротив, требования постепенно снижаются.
Конечно, если вы разрабатываете проекты виртуальной реальности, или создаёте ААА-проект с кучей графики, то вам потребуется мощное железо. Но не для мобилок.
Не используйте общих слов
Основы архитектуры движка
- Какие отличия между классами и ? В чём принципиальное отличие? Можно ли заставить выполнять те же самые функции? Почему и являются экторами? Аналогичный вопрос про и .
- Чем отличается от ? Для чего они оба используются? Зачем нужен , и почему он является эктором?
- Для чего используется ? Можно ли заменить его SharedRef‘ами? Как решить Circular Dependency у экторов (родитель имеет указатель на ребёнка, ребёнок — на родителя)? Когда будет удалён ? Как защитить сущность от удаления Garbage Collector’ом? Как удалить Actor‘а?
- Что такое CDO? Как можно прервать цепочку Reference’ов классов друг на друга, и зачем?
- Каков порядок инициализации основных сущностей движка (хотя бы на уровне контроллер/павны/стейты)? Каков порядок спавна ‘а?
- Компонент в компоненте — хорошо или плохо?
- Что такое ? Можно ли его взять в ‘е, и если да, то откуда?
- В чем принципиальное отличие Slate от UMG?
Blueprints
- Чем отличаются макросы от функций?
- Использование чего именно приводит к образованию Referenc’ов между классами? Ассетами? Как этого избежать?
- Что такое нативизация блюпринтов и какая от неё польза? Какие недостатки у включенной нативизации?
Сеть
- Где хранить геймплейные данные пользователя (например, инвентарь или количество очков) во время игровой сессии? Является ли подходящим местом?
- Как ‘ы реплицируются на клиенты? Каков жизненный цикл ‘а и ‘ов при переподключении игрока?
- Как разграничить репликацию данных по ролям? Что такое сетевые роли? Кем и по каким правилам они назначаются?
- На каких классах можно вызывать и почему? Можно ли расширить эту возможность на другой класс/сущность? Какие накладные расходы существуют на вызов RPC?
- Как реплицируются компоненты эктора? Как понять, что эктор реплицировался «целиком»? Что произойдет, если требуется отреплицировать, допустим, 3 Мб данных в экторе: как будет вести себя этот эктор? игра в целом?
- Как реплицируются массивы? И как реплицируются вложенные свойства (реплицируемое поле является структурой)?
- Какие ограничения сети существуют? (Цифры!) Как профилировать нагрузку на сеть? Какие методы оптимизации сети применяются? Для чего нужен ?
Физика и базовые алгоритмы
- Как работает демпфирование? Что такое сабстеппинг? Для чего он используется? Как работает синхронизация физики по сети?
- Что такое кватернион и какие проблемы решает их применение?
- Что такое каналы объектов и трассировки? Можно ли настроить различное поведение в рамках одного physics asset? Если нет, то почему, и как это обойти?
- Насколько дорогой операцией является трассировка? От чего это зависит?
Потоки
- Какие основные потоки есть в UE4? Какие задачи выполняются параллельно, а какие нет? Как устроены тик-группы?
- Какие действия можно выполнять в собственных параллельных потоках? (Или какие действия точно нельзя выполнять?) Как синхронизировать результаты с основным тредом?
Xiaomi, Redmi, POCO
Сейчас несколько смартфонов китайского техногиганта уже совместимы с Android 12 Beta: это Xiaomi Mi 11, Mi 11 Ultra, Mi 11i, и Mi 11 Pro. Правда, пока речь о чистой Android, в то время как MIUI под 12-ю версию операционки ещё в разработке.
Актуальную MIUI 12.5 на основе Android 11 получило множество устройств, так что стоит рассчитывать на длинный список. Ведь в последнее время смартфоны брендов Xiaomi, POCO и Redmi обновляются всё дольше. Android 12 придёт на следующие гаджеты:
-
Xiaomi Mi 11 / Mi 11 Pro / Mi 11 Ultra / Mi 11i / Mi 11 Lite
-
Xiaomi Mi 11T / Mi 11T Pro
-
Xiaomi Mi Mix 4 / Mi Mix Fold
-
Xiaomi Mi 10 / Mi 10 Pro / Mi 10 Youth / Mi 10i / Mi 10s
-
Xiaomi Mi 10T / Mi 10T Pro / Mi 10T Lite
-
Redmi 10 / Redmi 10 Prime
-
Redmi Note 10 series
-
Redmi Note 9 series
-
Redmi Note 8 2021
-
Redmi K40 series
-
Redmi K30 series
-
Redmi 10X series
-
POCO F3
-
POCO F2 Pro
-
POCO X3 / X3 Pro
-
POCO X2
-
POCO M3 / M3 Pro
-
POCO M2 / M2 Pro
-
POCO C3
Установка DLC с использованием Mobile Patching Utilities
Описанный способ работает не только для Android, но и для остальных платформ.
Вернитесь в редактор и откройте Level Blueprint карты Release_Map.
Требуемый файл манифеста и папка ChunksV3 находятся в ранее упомянутой папке CloudDir:
Внутри ChunksV3 находится *.pak файл DLC, разбитый на пакеты небольшого размера.
Install Directory всегда создается в папке, расположение которой можно узнать, используя следующую функцию:
Тестирование загрузки файлов в редакторе
Процесс загрузки можно протестировать, воспользовавшись локальным сервером. Установите Node.js.
Откройте командную строку и запустите сервер следующей командой:
Сервер запущен
Нажмите Play, находясь на уровне Release_Map. Если в папке …\AndroidDLC\PersistentDownloadDir\DLC появился *pak файл, значит загрузка прошла успешно.
Тестирование работы DLC
Настало время протестировать работу DLC на мобильном устройстве. Сейчас мы не будем использовать реальный сервер для загрузки, а скопируем *.pak вручную.
Заново скомпилируйте проект через Android APP профайл. Скопируйте AndroidDLC-Android_ETC2.pak и AndroidDLC_AndroidDLCDLC1.manifest в папку с APK.
Скопируйте файл Install_AndroidDLC-arm64.bat и модифицируйте его. Добавьте строки:
Запустите отредактированный скрипт из этой же папки и дождитесь окончания его работы. Запустите приложение и подождите несколько секунд. Если уровень сменился, значит DLC установлено.
Gamesacademy
Для начала занятий вам пригодятся базовые знания С++. Вам расскажут, как делать игры при помощи визуального скриптования Blueprint. И это самый быстрый способ создания игры.
На курсе вы узнаете, что из себя представляет Unreal Engine 4, какие у него возможности и как при помощи этого движка создать прототип РПГ выживастика.
Во время курса вы создадите:
- персонажа
- инвентарь
- оружие
- систему умений
- врагов
- интерактивные взаимодействия
- системы сохранения прогресса
Также вы узнаете как в UE4 работать с:
- Анимациями
- Физикой
- Интерфейсом и виджетами
- Искусственным интеллектом
Расписание занятий: Вт и Чт — с 20:00 до 21:30. Длительность курса: 14 лекций.
Другие возможности Unreal Engine 5
Разумеется, Lumen и Nanite — не единственные особенности нового движка. Помимо них разработчики из Epic Games добавили в UE5 продвинутую симуляцию реверберации звука, с помощью которой можно будет автоматически адаптировать звук к условиям окружения — например, создавать гулкое эхо в пещере. Впрочем, ничего принципиально нового в этом нет, потому что похожий функционал был доступен в Unreal Engine 4 с помощью сторонних плагинов.
Тем не менее встроенная функция точно будет полезна, так как она лучше интегрирована в движок, чем плагины, у которых могут быть проблемы с совместимостью на разных версиях. Аналогичная ситуация и с другими нововведениями вроде улучшенного физического движка и симуляции жидкостей. Все это было в играх на UE4, но в виде сторонних решений.
В этом плане Unreal Engine 5 вообще обещает быть хорош: если все функции будут работать как следует, то разрабатывать на нем станет намного удобнее, чем на UE4 или Unity — главном движке-конкуренте, который пока еще не обзавелся аналогичным функционалом.
Skillbox
Перед началом курса можно посмотреть бесплатные видеоуроки по работе с Unreal Engine. Вместе с опытным разработчиком Павлом Горкиным вы научитесь работать с игровым движком Unreal Engine 4, поработаете над персонажем, игровым окружением и создадите свою первую видеоигру.
Профессия Разработчик игр на Unreal Engine 4 с нуля до Middle
Вы освоите игровой движок Unreal Engine 4 и язык C++, научитесь разрабатывать игры разных жанров и соберёте портфолио из 4 игр. Всего за 2 года вы пройдёте путь до уровня middle и сможете устроиться в серьезную студию.
Чему вы научитесь:
- Работать с движком Unreal Engine 4
- Правильно оформлять код
- Применять паттерны проектирования — общие и специфичные для геймдева
- Программировать на C++
- Работать с задачами на kanban-доске
- Пользоваться идиомами языка C++
- Разрабатывать игры для ПК, под Android и iOS
- Использовать алгоритмы и структуры данных
- Отслеживать производительность игры
Профессиональные навыки:
- Разработка игр для PC, Android и iOS
- Программирование на С++ и Blueprints
- Профайлинг проекта
- Знание стайлгайдов и правил именования
- Многопоточная разработка
- Опыт работы с git
- Знание алгоритмов и структур данных
- Использование doxygen для генерации документации кода
- Знание идиом C++, библиотеки STL, написание тестов на языке C++
- Использование resharper для рефакторинга и статического анализа
- Знание ООП и паттернов проектирования — общих и специфичных для геймдева
- Расширение редактора UE4 Editor и создание плагинов для него
3 место – Batman: Arkham Asylum
Batman Arkham Asylum
В 2009 году компания Rocksteady буквально реанимировала вселенную «Бэтмана» в индустрии видеоигр. Их игра Batman: Arkham Asylum перевернула концепцию и репутацию игр по комиксам, прямо как трилогия К. Нолана «Темный Рыцарь», сделав упор на серьезность, мрачность и эпичность происходящего.
Batman Arkham Asylum скриншот
Batman: Arkham Asylum была создана на Unreal Engine 3, графические возможности которого актуальны и до сих пор. Интегрировав систему PhysX, Rocksteady добились невероятного качества графики, включая наличие динамичных объектов, постепенно рвущейся одежды и прочего. UE3 в очередной раз доказал, насколько красивыми могут быть созданные на нем игры.
Вкупе с этим Batman: Arkham Asylum брала отличным сюжетом и великолепно проработанными персонажами, что делает её одной из самых лучших игр на движке Unreal Engine.
Один человек сделал реалистичный шутер. Это разве возможно?
На первый взгляд Bright Memory: Infinite впечатляет, но это скорее пример того, как один человек может сделать иллюзию дорогого проекта с помощью современных инструментов разработки. Игра создана на Unreal Engine 4, одном из самых передовых движков с тысячами обучающих видео и гайдов. В 2015-м году Epic Games изменила условия лицензии, по которой распространяется движок: теперь им может пользоваться кто угодно и совершенно бесплатно. Можно даже сделать свою игру на UE4 и свободно ее продавать – в таком случае придется лишь отдавать Epic Games лишь 5% своей выручки, после того как она превысит 3 тысячи долларов.
Шутеры – не самый распространенный жанр среди инди-разработчиков, но в теории сделать такую игру не очень сложно. Нужно найти несколько подробных инструкций, изучить среду разработки движка и собрать свой проект. Для этого даже не нужно копаться в голом коде, достаточно вникнуть в подобные логические схемы движка и разобраться, за что отвечает каждое значение. За один день что-то осмысленное сделать не получится, но за несколько месяцев или лет – вполне. Там будет и какая-никакая стрельба, и более-менее адекватная физика, и все остальные механики, которые выбрал разработчик.
Творческие навыки в современной инди-разработке, конечно, крайне желательны, но не обязательны. Локации, модели персонажей, анимации, звуковые эффекты и даже программные модули можно загрузить в официальном магазине Unreal Engine 4, а затем использовать в своем проекте любые их комбинации. Такие товары (ассеты) выкладывают разработчики со всего мира: кто-то предлагает свои работы бесплатно, другие выставляют ценник от нескольких до сотен евро.
(этот фотореалистичный лес продают за 186 евро)
Из-за такой доступности готовых (и довольно впечатляющих) ассетов в Steam, например, появились сотни однотипных инди-хорроров, действие которых зачастую разворачивается в одних и тех же локациях. Сильно полагаться на чужие ассеты непрестижно, геймеры и интернет это чаще всего замечают и высмеивают. Разработчик Bright Memory обжегся на использовании краденых моделей, а в остальном очевидно, что игра вторична и собрана из чужих наработок – отсюда отсутствие общего стиля. Поверхностный сюжет про слияние нескольких эпох из-за временной аномалии – отличное оправдание для использования всех понравившихся ассетов.
Где-то половина зрелищности Bright Memory: Infinite – графические улучшайзеры, которые добавить в проект не так уж и сложно. Например, Unreal Engine 4 отлично симулирует различные материалы, а также эффекты частиц (дождь, огненные искры и так далее). На максимальных настройках в игре повсюду кружат вихри мусора, игрок тоже редко стоит на месте – в динамике картинка всегда выглядит лучше.
Главный вау-эффект игры обеспечивает трассировка лучей (RTX). Эта новомодная технология, работающая только на топовых видеокартах Nvidia RTX и еще не вышедших консолях Xbox Series X и PlayStation 5, добавляет в игры реалистичное освещение. Версия без требовательной технологии выглядит пресно:
Наконец, играет роль и срок разработки. Birght Memory – линейная и довольно небольшая игра, которую создают уже больше трех лет. Это немаленький срок для такого крошечного проекта. Кажется, главный секрет Цзэн Сянчэна в том, что он пускает в ход все идеи, которые ему приходят в голову – в то время как другие разработчики тратят много времени на поиск подходящего концепта и создание прототипов без мусорных механик.
* * *
Первый эпизод игры продолжительностью примерно в один час уже давно доступен в Steam. Автор обещает, что его покупатели получат более продолжительную Infinite бесплатно.
Bright Memory: Infinite будет работать в разрешении 4K при 120 FPS на Xbox Series X. Игра также выйдет на PC, Xbox One, PS4 и, предположительно, PlayStation 5 в 2021 году.
Создание декоратора
прекращенияEnemyBlackboardBT_Muffinнажмите правой клавишей мышиSequenceAdd Decorator\Blackboard
BlackboardBlackboard KeyEnemy
EnemySequenceObserver Aborts
Использование Observer Aborts
- Self: этот параметр позволяет поддереву атаки прекратить собственное выполнение, когда Enemy становится недействительным. Это может случиться, когда Enemy умирает до завершения поддерева атаки.
- Lower Priority: этот параметр позволяет прекращать выполнение деревьев с более низким приоритетом при задании Enemy. Поскольку поддерево случайного движения расположено после атаки, оно имеет меньший приоритет.
Observer AbortsBoth
- Selector запускает поддерево атаки, если задан Enemy
- Если он задан, то Pawn будет двигаться и поворачиваться в сторону врага
- Затем он выполнит атаку
- Наконец, Pawn будет ждать две секунды
- Selector запускает поддерево случайного движения, если поддерево атаки завершается неудачно. В нашем случае оно завершается неудачно, если не задан Enemy.
- BTService_SetRandomLocation генерирует случайную точку
- Pawn движется в сгенерированную точку
- Затем он ждёт пять секунд
BT_MuffinPlay
По трейлеру непонятно, что происходит. Что это за игра?
Действие игры разворачивается в некоем мегаполисе 2036 года. В небе появилась червоточина, из-за которой в мире недалекого будущего стали появляться древние самураи и другие объекты из тысячелетнего прошлого. На исследование феномена отправляются агенты нескольких организаций, среди которых и главная героиня Шелия.
Разработкой FYQD занимался сам, в свободное время. В 2017 год вышел первый трейлер, а в августе того же года игра стала одним из 15 проектов на движке Unreal Engine 4, получивших грант от Epic Games.
FYQD собрал в своем проекте все, что только мог: протагониста-женщину, механики шутеров от первого лица и экшенов вроде Devil May Cry. В игре будут головоломки, прокачка умений персонажа, возможность останавливать время и гаджеты. Вдобавок к этому Bright Memory: Infinite стилистически похожа на все современные видеоигры сразу. Отчасти это объясняется тем, что в ранней версии игры, выпущенной в начале 2019 года, игроки нашли украденные ассеты других разработчиков. Цзэн Сянчэн тогда признал, что нелегально использовал модели некоторых врагов и пообещал, что уладит конфликт с правообладателями и все-таки наймет собственного художника.
Концептуальные ловушки
Или скорее пара вещей, о которых стоит сказать.
-
При занулении переменной — реплицируемого UObject’а, — OnRep не будет вызван и перестанет вызываться на клиенте в дальнейшем. Звучит как баг, и если честно, я не помню, почему оно работает именно так. Достаточно об этом знать и учитывать при разработке.Проверил на синтетическом тесте для UE 4.18: всё работает как надо, так что информация более не актуальна. - Вызов клиентской RPC на сервере не выполнит саму функцию на сервере, только отошлёт команду выполнить её на клиенте. Если необходимо выполнить её и на сервере, надо вручную вызвать Implementation.
- Если эктор обновляется по сети редко (например, PlayerState), дважды с опаской применяйте там reliable RPC. За время между синхронизациями вы легко можете забить буфер, если не будете об этом думать. В идеале, такие специальные сетевые классы должны тикать и обновляться по сети с однопорядковой частотой.
Бонусы
Помимо самого курса Вы также получите целых 5 отлично дополняющих основной курс Бонусов. Все эти Бонусы – это чистая практика для знаний, полученных из курса. Это очень ценная практическая информация.
Динамическая смена дня и ночи
В этом Бонусе из 10 уроков Вы научитесь созданию мощного механизма смены дня и ночи с нуля. Вы увидите, как настраиваются кривые, чтобы рассвет и закат было именно в нужное Вам время. Узнаете, как сделать вращение солнца, как сделать красивое звёздное ночное небо, как сделать луну и фазы луны, которые ещё будут плавно меняться с течением времени. Узнаете, как сделать всё максимально удобным для настройки и как добавить, чтобы время плавно менялось с заданной скоростью во время игры. Также узнаете, как сделать правильное освещение, чтобы ночью было темно, а днём было светло.
Создание динамической погоды
Бонус состоит из 7 уроков, в которых Вы увидите создание с нуля дождя, управляемого через Blueprint. Узнаете, как динамически менять влажность материалов объектов и ландшафта, как создаётся сам контроллер для настройки погоды и управления ею, как создаются тучи. В итоге, у нас получится следующая система: перед дождём сначала скапливаются и темнеют облака, потом начинает лить дождь, плавно увеличивается влажность поверхностей, затем дождь прекращается, начинается плавное рассеивание туч и плавное высыхание поверхностей. Всё это Вы увидите в этом Бонусе.
Создание искусственного интеллекта для NPC
Во многих играх NPC живут по своему расписанию. Например, утром просыпаются, идут завтракать, затем идут на работу, вечером идут гулять, потом ужинают и идут спать. И вот реализацию такой системы Вы и увидите в этих 7 уроках данного Бонуса.
В результате наши NPC будут жить строго по заданному нами расписанию и будут: гулять, есть и спать. Причём, спать они будут исключительно в своей кровати. А в качестве места для приёма пищи будут выбирать ближайшее место для этого. Также Вы увидите, как легко всё это расширяется для добавления новых возможных действий для NPC.
Создание игры под мобильные устройства
Не секрет, что Unreal Engine всё больше и больше пользуется популярностью у разработчиков мобильных игр. В целом, процесс создания игры под мобильные устройства не сильно отличается от создания игры на ПК. Однако, есть множество мелких нюансов, которые надо учитывать. И в рамках 10 уроков этого Бонуса, мы с Вами об этих нюансах поговорим, а попутно создадим мобильный шутер от первого лица, в котором надо сражаться с постоянно появляющимися и атакующими игрока зомби.
Послесловие
Я постарался кратко рассказать обо всех вещах, которые я считаю принципиально важными на общем уровне при работе над мультиплеером на анриале. Можно бесконечно говорить о лагокомпенсации, сетевой интерполяции/экстраполяции, особенностях сетевых архитектур, но всё это будет базироваться на тех же самых принципах и подходах, описанных выше. Да и заслуживает отдельной статьи.
Наш результат на AW: Assault — возможность играть на 3G сети без каких-либо проблем и значимых лагов. Даже Edge (правда, при стабильном соединении) можно назвать достаточным. На мой взгляд, это весьма достойные цифры для мультиплеера на 16 игроков. Помимо толщины канала, мы также весьма не критичны к пингу, в отличие от многих других игр.
Если вам есть что дополнить, опровергнуть или обсудить — добро пожаловать в комментарии! 🙂
Заключение
Статья создавалась не только с целью рассказать о возможностях инструмента World Composition, его плюсах и минусах
Основной целью было показать, насколько важно разобраться, как работать с определенной системой, и понять, как эта система устроена изнутри. Такой подход позволяет эффективнее использовать инструменты, которые предоставляет движок и, при необходимости, принимать решения о модификации этих инструментов или делать выбор в пользу написания собственных систем для решения тех или иных задач
В итоге, с помощью внесённых изменений мы смогли добиться необходимой скорости загрузки чанков, улучшить производительность и не превысить лимиты по памяти на всех целевых платформах. А дополнительные работы по автоматизации сильно упростили процесс разработки.
P.S. За время, пока я писал эту статью, вышел в ранний доступ Unreal Engine 5. В нем появилась замена World Composition под названием World Partition. Подробный разбор World Partition имеет смысл делать, когда движок выйдет из раннего доступа. В данный момент у World Partition имеется ряд багов, и сама система пока не в финальном виде. Но я был приятно удивлен, когда увидел, что те идеи, которые мы реализовали, модифицируя World Composition, присутствуют в World Partition (я даже нашел куски кода, которые один в один как наши изменения). В World Partition сделана загрузка уровней и добавление их в мир по приоритетам, в зависимости от дистанции до игрока и от направления, в котором сейчас смотрит камера. В World Partition стейт машина чанка модифицирована по аналогии с тем, как сделали мы. Есть функционал в редакторе для автоматического размещения экторов на чанки по сетке и командлет для конвертации обычного уровня в уровень с World Partition. Приятно знать, что наша разработка велась в правильном направлении, что также подтверждают результаты тестов на целевом железе.
P.P.S. Хочу поблагодарить Константина Якушенко за очень полезные доклады о портировании Sinking City на PlayStation 4, XBox One и Nintendo Switch. За идеи задавать произвольную позицию точки стриминга и приоритизировать загрузку уровней.