[Перевод] Как подготовить игру к портированию на ПК и консоли
Преимущества кроссплатформенных игр уже долгое время обсуждаются в кругах геймеров, но мало освещаются в среде разработчиков. Существует не так много статей о базовых вещах, необходимых для создания кроссплатформенной игры.
Тем не менее, кроссплатформенность сейчас находится на подъеме. Появляется все больше и больше игр, обладающих этим свойством. Fortnite, Call of Duty, Street Fighter ― все они разных жанров, по-разному реализованы, но в той или иной степени обладают функциями кроссплатформенности.
Андерсен Хоровиц в своем блоге писал о том, что игры исторически сегментировались различными платформами, но теперь с ростом популярности кроссплатформменности количество мультиплеерных игр тоже растет все больше и больше.
Зачем нужно делать игру кроссплатформенной?
Для игроков это здорово: не нужно выбирать, на каком устройстве запускать игру, ― можно беспрепятственно играть с друзьями, не беспокоясь о том, есть ли они в базе игроков.
Для разработчиков игр это тоже здорово, ведь пользовательская база теперь не сегментирована по разным платформам ― вместо этого можно организовать один большой пул игроков и создать более богатый многопользовательский опыт с более полными игровыми сессиями.
Отлично, так давайте портировать нашу игру на несколько платформ!
Конечно, звучит классно, почему бы и нет. Вот только…
Во «Властелине колец», если вы помните, на совете Элронда герои тоже обсуждали, мол, давайте же просто сделаем, что должны, на что Боромир сказал:
А все потому, что Боромир знает: создание полноценной кроссплатформенной игры ― это не так-то просто.
Так появилась идея подготовить материал для тех, кто подумывает о создании собственной кроссплатформенной игры.
Если вы уже издавали игры раньше, значит, вы имели дело с их отправкой на различные платформы и знаете возможности каждой из них, что будет хорошей основой для сегодняшнего материала ― и, кроме того, поможет на начальном этапе подготовки.
9 вещей, которые вам необходимо учесть перед созданием кроссплатформенной игры
Совет №1: Ознакомьтесь с терминологией
Различных понятий, связанных с кроссплатформенностью, довольно много, но для начала введем самые необходимые: cross-play, cross-progression и cross-buy.
В чем разница?
Cross-Play (кросс-игра, или кроссплей) ― это как раз то, о чем люди думают, когда слышат о кроссплатформенной игре: объединение пользователей, играющих на различных платформах, в одну многопользовательскую сессию. То есть, когда игроки Xbox могут столкнуться в игре вместе с игроками PlayStation или Steam.
Cross-Progression (или Cross-Save, кросс-сохранение) называют возможность начать играть на одной платформе, сохранить свой прогресс и продолжить игру на другой платформе. Подобное можно встретить как в однопользовательских, так и в многопользовательских играх.
Cross-Buy (или Cross-Commerce, кросс-покупка) ― это покупка, совершенная на одной платформе, а затем появляющаяся в вашей библиотеке на другой. Ее близкий родственник ― BOPA (Buy Once Play Anywhere: один раз купил ― играй где угодно), но об этом мы еще поговорим позже.
Совет №2: Создайте собственный онлайн-домен
Когда вы выпускаете игру на разных платформах, вам становятся доступны специальные вспомогательные сервисы каждой из платформ, и они действительно удобны.
Если вы хотите сделать кроссплатформенную игру, к сожалению, вы не можете использовать большинство из этих сервисов, потому что статистика в Steam, например, не совпадает со статистикой в Xbox или PlayStation. Вы должны завести свой набор сервисов: статистики, системы идентификации, матчмейкинга и прочего, ― который будет связывать воедино данные от различных платформ.
Итак, что вам понадобится в первую очередь?
- Система идентификации и учетных записей;
- Система электронной коммерции (особенно если вы собираетесь монетизировать свою игру при помощи встроенных покупок);
- Другие обязательные сервисы в соответствии с сертификационными требованиями.
Например, сертификация Xbox требует, чтобы вы использовали MPSD (каталог мультиплеерных сессий), даже если у вас есть собственная система матчмейкинга, потому что всю информацию, которую вы храните в MPSD, они впоследствии используют для включения Rich Presence в Xbox Dashboard.
Совет №3: Узнайте больше о своих игроках
Рассмотрим пример.
Допустим, у игрока есть:
- Аккаунт в Steam;
- Аккаунт в Epic Store;
- Учетная запись Xbox;
- Учетная запись PlayStation;
- Учетная запись Switch;
- И т. д.
Откуда игра узнает, что это один и тот же человек?
Тут на помощь приходит так называемая система привязки учетных записей.
Привязка учетных записей позволяет связать вашу общую учетную запись с учетными записями различных платформ.
Если вы играете в Call of Duty, то наверняка знаете, что последняя часть франшизы является кроссплатформенной. И если вы захотите найти своего друга в системе, вам понадобится использовать Activision ID. Так, если вы играете на Xbox, вы не сможете найти своих друзей, играющих на PlayStation, потому что две эти базы игроков не пересекаются ―, но в то же время данные обо всех игроках обеих платформ хранятся в Activision ID.
Эта единая система идентификации станет фундаментальной частью не только для текущей игры, но и для всех ваших будущих проектов. Именно она связывает вас с другими платформами.
Вот еще один совет. Внимательно отнеситесь к требованиям GDPR и CCPA: их нормативы необходимо принять во внимание еще на ранней стадии, дабы избежать неприятных последствий. Вдобавок, рано или поздно начнут появляться новые платформы, вы же хотите иметь возможность добавлять их к своей игре по мере появления?
Ниже показан один из примеров того, как реализовать привязку аккаунта к Steam.
Таким образом, система идентификации нужна для того, чтобы обменять токен Steam на свой собственный. Затем игрок может использовать этот токен для активации необходимых ему служб.
Совет №4: Пусть пользователи играют вместе
Теперь, когда вы успешно идентифицировали своих игроков при помощи системы привязки учетных записей, следующий шаг ― заставить пользователей играть вместе.
Итак, пришло время для кроссплея.
Для того, чтобы вы могли подключить игроков к одной мультиплеерной сессии со всеми их друзьями, вам нужно организовать систему матчмейкинга, управление игровыми сессиями и еще ряд сервисов ― полный список зависит от нужд конкретной игры. Таким образом, сначала вы идентифицируете пользователей и сводите их вместе вне зависимости от платформы, на которой они играют, а затем матчмейкинг организовывает их в игровые сессии.
Несколько заметок о мультиплеере и качестве соединения.
Если вы сами выбираете игровой движок, берите более дружественный к кроссплатформенности: в таких движках уже есть встроенный механизм для выполнения синхронизации клиент-сервер. Если же вы решите создать свой собственный движок, конечно, вы вправе это сделать, но имейте в виду следующее.
Когда вы захотите, чтобы ваши пользователи начали подключаться к другим игрокам, лучше не используйте прямой маршрут P2P. При учете, что вы не можете использовать встроенные библиотеки платформ вроде Xbox Secure Device Associations, такая задачка становится довольно запутанной, особенно когда мы говорим о подключении консоли к ПК. Совет: используйте либо выделенный сервер, либо одноранговый сервер ретрансляции для создания вашей сетки.
И последнее: поскольку вы теперь имеете дело с платформами разных мощностей ― ПК, консоли, ― пусть ваши симуляции используют фиксированную частоту 30 кадров в секунду. Рендеринг при этом можно оставить, как есть.
Совет №5: Позвольте игрокам продолжить игру на другой платформе
Как и многие другие, автор провел сотни часов в «Ведьмаке 3»: сначала играл на PlayStation, затем решил переключиться на Switch, из-за чего пришлось начинать все сначала, потому что в «Ведьмаке» нет возможности продолжить игру на другой платформе. Со временем разработчики все же организовали кросс-сохранение между Steam и Switch. Правда, речь-то здесь шла о PlayStation 4. Впрочем, вполне вероятно, что рано или поздно CD Projekt RED настроят кроссплатформенность и между ними ― главное, что уже задано правильное направление.
Как хранить данные ― целиком и полностью ваш выбор: можете хранить их в облаке в виде BLOB-объектов, можете в виде статистики, можете в виде строки в атрибутах профиля. Главное ― достигнуть цели в определении, что вы ― это все еще вы вне зависимости от того, играете вы на Switch, PlayStation или ПК.
Также, говоря о кроссплатформенности, нельзя не упомянуть о SPOP и MPOP.
SPOP (single point of presence) означает единственную точку присутствия, когда вы разрешаете только одно подключение к учетной записи в любой момент времени, и вход в игру на одной платформе означает автоматический выход из нее на другой. Таким образом SPOP может защитить вас от одновременного появления в одном и том же месте с различных платформ. Это самый простой и безопасный способ реализации, который позволяет избежать застопоривания данных.
MPOP (multiple points of presence) представляет собой совсем другой способ поведения. Он позволяет иметь несколько соединений, которые логически указывают на одну и ту же учетную запись. Организовать его бывает очень сложно, так как при MPOP должна создаваться гостевая учетная запись в случае, когда пользователи входят в одну и ту же учетную запись одновременно, что может вызвать проблемы с обеспечением правильного сохранения прогресса.
И хотя в большинстве ситуаций оказывается удобнее использовать SPOP, вы должны сами тщательно рассмотреть преимущества и недостатки того или иного способа для своей игры.
Совет №6: Унифицируйте свою коммерцию
Давайте поговорим о разнице между основным и вспомогательным магазином.
Основной магазин ― это стор, который вы должны настроить со стороны платформы, где происходят операции с реальными деньгами, в то время как вспомогательный ― это тот, который вы контролируете в игре.
Основной магазин сначала нужно настроить на каждой отдельной платформе, а затем перейти в различные регионы, что представляет собой уже довольно сложную задачу ― тем более, что у кроссплатформенной игры нет никакого API, чтобы сделать это. Это кропотливый ручной процесс, который вам нужно провести для каждой отдельной платформы. Поэтому лучше организовать основной магазин максимально просто, а уже внутриигровой обустроить так, как вы захотите.
Выше представлен пример работы системы сторов, где игроки могут совершать покупки в Steam, а безопасность этих покупок обеспечивает единая система электронной коммерции.
Далее приведена схема покупки в Steam.
Совет №7: Остерегайтесь дополнительных сертификационных требований для кроссплатформенных систем
В вашей жизни гарантированы три вещи:
- Смерть;
- Налоги;
- Сбой сертификации на одной из платформ при выпуске патча.
Если вы уже проходили сертификацию раньше, то знаете, что она может оказаться довольно сложной. В нее входит множество аспектов, и этот список варьируется от платформы к платформе. При создании кроссплатформенной игры вы должны иметь в виду, что на этот случай существуют еще дополнительные требования сертификации.
Рекомендация: создайте себе подушку безопасности, чтобы успеть понять, что вам потребуется для успешного прохождения сертификации, и принятия соответствующих мер.
Совет №8: Разделите релиз и деплой
В Fortnite есть временное событие, переносящее героев из первого сезона во второй: согласно сюжету, весь мир внезапно начал разрушаться и поглощаться черной дырой.
Интересно то, что это событие никак не связано с активацией обновления. Когда вы выпускаете игровое обновление, вы не можете синхронизировать его с изменениями конфигурации на всех платформах, это очень трудоемкий процесс: нужно обратиться к аккаунт-менеджеру, пройти процесс сертификации и сделать множество других вещей.
Но это не единственный способ, при помощи которого вы можете внести в игру изменения.
Игровые изменения обычно вносятся посредством:
- Обновления игры;
- Патча для замены данных;
- Переключателей на стороне сервера (Server-Side Toggles).
Переключатели на стороне сервера ― это переменные сервера, которые вы сначала определяете на сервере, а затем заставляете игровые клиенты и сервера реагировать на изменения этих переменных. Они могут быть полезны для планирования игровых событий, балансировки игры, активации Kill-Switch и флагов функций.
Примеры использования:
- Включение/выключение функций на определенных платформах;
- Ограничение доступа к определенным функциям в игре для QA.
На схеме выше показано, как можно устроить систему реагирования игровых клиентов и серверов на изменение переменных на сервере. Push-уведомления в данном случае бывают довольно удобны, но не обязательны, вместо них можно просто пользоваться пуллами.
Совет №9: Один раз купил, играй где угодно (BOPA)
Внимание: далее идет неизведанная территория, и за абсолютную точность данных автор ручаться не может.
BOPA (Buy Once Play Anywhere) позволяет пользователям покупать игру на одной платформе так, чтобы затем она появилась в их покупках на любых других платформах.
Почему это важно?
Игрокам теперь не нужно беспокоиться о том, какие платформы покупать ― они могут просто купить игру. Для разработчиков игр польза заключается в том, что они могут собрать своих игроков в одну базу, расширить свой бренд и привлечь трафик в свой магазин.
Перечислим три элемента, необходимых BOPA:
- Единая система идентификации;
- Единая система предоставления прав доступа с возможностью их отслеживать;
- Предоставление прав доступа в вашем кроссплатформенном магазине без необходимости ввода ключа: возможность вызова API другой платформы для предоставления прав на текущей.
Стоит заметить, что последний вариант не является широкодоступным, его поддерживают лишь некоторые платформы.
Приведем примеры реализации BOPA.
Сценарий 1: после покупки в вашем магазине игра появляется в библиотеке Steam.
Примечание: задействуемый здесь API не доступен публично, поэтому вам нужно поговорить с вашим аккаунт-менеджером.
Сценарий 2: при покупке в Steam игра появляется в вашем магазине.
В данном случае вы не сможете отследить процесс покупки в Steam, поэтому вам придется положиться в этом на игрока.
Ключевые моменты
Кроссплатформенность идеально подходит для игр с долгосрочным планом поддержки проекта. Как вы наверняка уже поняли, создание таких игр весьма нетривиально: вам понадобится большая команда, много времени и денег, чтобы иметь надлежащую инфраструктуру для ее поддержки.
С чего стоит начать?
Так же, как и в случае игровые движков, здесь существуют различные решения, которые вы можете использовать для реализации кроссплатформенности, поэтому нет необходимости создавать их с нуля ― конечно, если вы этого не захотите сами. Некоторые из них: GameSparks, Photon, AccelByte, PlayFab.
У каждого есть свои плюсы и минусы ― зависит от того, что вам нужно. Они могут различаться по:
- Стоимости;
- Обслуживанию различных платформ;
- Возможностям настройки и расширяемости;
- Качеству SDK;
- Надежности;
- Масштабируемости.
В этой статье рассмотрены самые базовые проблемы, с которыми можно столкнуться при создании кроссплатформенной игры. Для дальнейшего изучения этого аспекта можно присоединиться, например, к теме Online Gamedev [BaaS] в Discord.