Публикация готового проекта Unreal Engine с Steam на VK Play
По просьбе некоторых игроков решил импортозаместить свой стимовский проект на отечественную платформу VK Play хD Плюс это дополнительная аудитория без лишних затрат. В интернете не так много информации, как выполнить перенос проекта, поэтому я попытаюсь поделиться своим опытом, напишу все шаги на примере моей игры Paper Battlefield ^_^
PS: Это не реклама VK >_< Просто у меня были сложности, на решение которых ушло много времени. Их документация не дает ответов на многие вопросы. Эта статья для разработчиков, надеюсь, она кому-то поможет.
Перенос у нас будет максимально простым, без изменения кода игры / с незначительными изменениями, благо VK Play поддерживает перенос игры из Steam с упрощенным подключением к инфраструктуре через замену файлов .dll.
Итак, что мы должны уже иметь:
1. Собственный рабочий проект на Unreal Engine.
2. Внедренный Steam SDK в наш проект.
Проект не обязательно должен быть выложен на Steam, но его стоит хотя бы протестировать с тестовым Steam AppID 480, чтобы убедиться в работоспособности Steam SDK.
Перенос у нас будет состоять из 8 этапов:
1. Создание кабинета разработчика VK Play.
2. Оформление страницы игры.
3. Публикация страницы игры.
4. Подготовка билда.
5. Сборка дистрибутива и загрузка в VK Play.
6. Перенос достижений.
7. Тестирование.
8. Выпуск.
1 этап. Создание кабинета разработчика VK Play.
Заполняем заявку на свою игру на сайте developers.vkplay.ru и ожидаем одобрения (проверка у меня прошла быстро - в тот же день, а так может занять 2 рабочих дня). В отличие от Steam это бесплатно.
После проверки они дадут доступ в личный кабинет, где вы сможете заполнить свою платежную информацию и приступить к описанию своего проекта.
2 этап. Оформление страницы игры.
Подготавливаем изображения, стимовские не подойдут, размеры отличаются. В кабинете добавляем наш проект, выбираем тип проекта - Клиентская, и подтип - в моем случае Premium. Выбираем базовую локализацию страницы - естественно RU. Если ввели неправильные данные при добавлении игры, то исправить не получиться - просто перемещаем в архив (удалить нельзя) и создаем новый.
Далее заполняем страницу игры - название, описание, скриншоты, трейлер, цены и т.п. Важно отметить, что, если делаете на двух локализациях (ru, en), то необходимо заполнить все поля и для английской версии, включая системные требования и скриншоты в EN локализации.
Думаю, здесь не должно возникнуть проблем.
3 этап. Публикация страницы игры.
Нам важно опубликовать страницу в первую очередь, чтобы пользователи уже могли добавлять нашу игру в список желаемого. В кабинете выбираем "Публикация" -> "Публикация страницы" и проверяем чек-лист. Там должны стоять все галочки. Галочка может стоять даже если не заполнены поля EN.
Проверка будет состоять из двух модераций: техническая (3-5 рабочих дней) и маркетинговая (3-5 рабочих дней). У меня проверка в сумме заняла 3 дня с учетом правки (дополнил системные требования и скриншоты в EN локализации) :D
4 этап. Подготовка билда.
Корректируем конфигурационный файл DefaultEngine.ini:
- Заменяем SteamDevAppId на "ID для эмуляции Steam" из "Системные свойства" страницы игры в Кабинете разработчика.
- Отключаем поддержку Sessions: убираем "bInitServerOnClient=true" в [OnlineSubsystemSteam], если она есть. Если была поддержка сессий, то добавляется дополнительный этап 4.1, который представлен в конце статьи.
В итоге файл DefaultEngine.ini должен выглядеть примерно так:
[/Script/Engine.GameEngine]
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
[OnlineSubsystem]
DefaultPlatformService=Steam
Achievement_0_Id=ACH_NAME1
Achievement_1_Id=ACH_NAME2
Achievement_2_Id=ACH_NAME3
[OnlineSubsystemSteam]bEnabled=trueSteamDevAppId=<ID для эмуляции Steam>
[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"
Собираем билд в Unreal Engine.
Заменяем steam_api64.dll из билда игры (<Папка билда>\Engine\Binaries\ThirdParty\Steamworks\Steamv153\Win64\) на dll от VK Play.
Для этого сперва узнаем версию библиотеки steam_api64.dll:
1. Щёлкните по файлу правой кнопкой мыши → выберите «Свойства».
2. Перейдите на вкладку «Подробно».
3. Версия файла будет указана в строке «Версия файла».
Способ, описанный в документации не работал, выдавал ошибку. Поддержку проинформировал, в скором времени, возможно, заработает.
Скачиваем архив с библиотеками steam_api.dll от VK Play, распаковываем, выбираем нашу Release версию и заменяем steam_api64.dll.
Все наш билд готов :D
5 этап. Сборка дистрибутива и загрузка в VK Play.
Сборку дистрибутива будем делать через их утилиту GameCenterUploader
Распаковываем и создаем новую папку "Assembly folder" для служебного каталога GameCenterUploader. Запускаем GameCenterUploader.exe. и в "Path to the source client files folder" указываем путь к папке с нашим билдом, в поле "Path to the Assembly folder" указываем нашу новую созданную папку. Далее указываем в поле "Authorization token" токен для авторизации в утилитах сборки из "Загрузка дистрибутивов" страницы игры. Проверяем и нажимаем "Start to Assemble". Собранный билд будет автоматически загружен на серверы VK Play.
6 этап. Перенос достижений.
Данный этап предусматривает, что уже имеются внедренные стимовские достижения в коде игры. А по поводу как добавить достижения Steam в свою игру имеется достаточно много информации в других источниках.
Эмуляция нам позволяет, не меняя код, оставить уже реализованную систему достижений, поэтому нам достаточно добавить описание на странице игры.
Заполняем "Достижения" страницы игры в Кабинете разработчика. Поле "API Name для эмуляции Steam" вписываем наши стимовские API Name достижений. Для достижений без прогресса поле "Максимальный прогресс" можно оставить 0.
7 этап. Тестирование.
В кабинете выбираем "Аккаунты" и добавляем логины тестировщиков.
Переходим в "Основные свойства" и активируем им эмуляции покупок (если игра платная).
В течение 15 минут у этих аккаунтов появиться возможность просмотра страницы игры, выбора тестовой версии и загрузки (даже до публикации). Достижения уже должны работать.
Можно приступить к тестированию.
8 этап. Выпуск.
В кабинете выбираем "Загрузка дистрибутивов" и переводим нашу тестовую версию в "live", затем выбираем "Публикация" -> "Публикация проекта". Состоит из технического ревью (3-5 рабочих дней) и маркетингового (3-5 рабочих дней). Моя игра находится на этом этапе.
*4.1 этап. Настройка сетевой игры.
Это дополнительный этап, если в игре был сетевой режим. Помните, в 4 этапе мы убирали поддержку Sessions? Так вот на сегодняшний момент в VK Play нет встроенной возможности, которая обеспечивала бы игру через онлайн-сессии (сессии видны через интернет). С включенным "bInitServerOnClient=true" SteamSDK будет уходить в Shutdown во время запуска игры, т.е. даже достижения не будут работать.
Поэтому есть два выхода: выпилить сетевой режим или изменить его на LAN - возможность играть по локальной сети (по интернету игроки сами могут эмулировать локальную сеть через Hamachi, RadminVPN...). В моем случае было бы не логично выпиливать сетевой режим, решил оставить игру через LAN.
Простое изменение "UseLAN" на "True" у Create Advanced Session и Find Session Advanced не помогает, так как игра будет требовать подключения к серверам Steam. Поэтому помимо этого надо дополнить опции создания серверного уровня параметром:
?bIsLanMatch=1 - это позволит работать автономно от серверов Steam.
Для Create Advanced Session и Find Session Advanced выставляем следующие опции:
Все, перенос завершен успешно ^_^
PS: Со стима не уходил, вот ссылка на мою игру Paper Battlefield.
Вот документация от VK Play - в момент написания не содержит информации по замене SteamDevAppId, OnlineSubsystem и особенностей Unreal Engine (дополнение: документация у них была дополнена, видно, что работают).
Так же можете обращаться к поддержке VK, она отвечает оперативно.