Делитесь контентом вашей игры со всем миром с помощью Firebase Hosting

Динамическое предоставление контента из облачного хранилища, чтобы ваша игра стала вирусной

Сегодняшние игры живут и умирают благодаря создаваемому ими общественному шумиху, а это значит, что вам нужно привлекать игроков еще до того, как они установят вашу игру. Я покажу вам, как я добился этого, интегрировав Firebase Hosting с моей игрой Swordchucks из моего предыдущего поста.

Делитесь игровым контентом со всем миром

Поскольку мой тезис состоит в том, что для успеха на сегодняшнем рынке игры нуждаются в социальной поддержке, моя цель - сделать так, чтобы моим существующим фанатам было как можно проще рассказывать о том, почему они находят мою игру привлекательной. Для этого я создам ссылку, открывающую веб-страницу. На этой странице будет скриншот, показывающий, что происходило в момент смерти игрока в Swordchuck Challenge, и краткое описание происходящего, которое, будем надеяться, побудит новых игроков загрузить мою игру и начать играть:

Хостинг Firebase - один из моих любимых инструментов в Ящике инструментов Firebase. На первый взгляд это довольно скромно: всего лишь небольшой простой хостинг-провайдер с отличным уровнем бесплатного пользования, но без каких-либо генераторов сайтов. С точки зрения философии и функциональности это такая же часть Firebase, как и любой другой продукт. Это безопасно: поддержка SSL из коробки без дополнительной оплаты, это быстро: глобальный CDN гарантирует, что необходимый контент всегда находится рядом с пользователем, и он расширяемый: поддержка динамического контента через Функции Firebase Cloud и Облако Google Запустить".

Для начала я сначала установлю Firebase CLI. Используйте firebase login для настройки моей учетной записи, затем введите firebase init в каталоге, в котором я хочу хранить контент своего веб-сайта.

Проходя через этот процесс, я убеждаюсь, что работаю в проекте swordchuck-challenge вместе с остальной частью моей игры:

Когда я решаю, какие функции использовать, безопаснее всего просто выбрать Хостинг. Я также хотел бы сохранить свои правила Storage в исходном репозитории, но если я это сделаю, я хочу убедиться, что копирую файл правил из консоли Firebase, прежде чем набирать firebase deploy . В противном случае я могу потерять все, что ввел в консоль!

Чтобы протестировать свои веб-страницы локально, я могу ввести firebase serve:

Перейдя к localhost:5000, я могу увидеть страницу шаблона по умолчанию:

Точно так же, если я наберу firebase deploy, я могу опубликовать эту страницу в Интернете:

После развертывания https://swordchuck-challenge.firebaseapp.com будет соответствовать тому, что я видел на localhost. Обратите внимание, что Firebase также предоставляет разработчикам web.app доменов. Если вы перейдете на вкладку «Хостинг» в консоли Firebase, вы увидите этот URL:

Я оставлю index.html как есть. Может мне потом закинуть крутой лендинг с инвайт-ссылкой на бету!

Что я хочу сделать сейчас, так это сопоставить путь /scores/<some_user_id> с последним общим счетом <some_user_id>. Мой первый шаг - клонировать index.html в score.html. Я также создаю js папку и создаю файл score.js, который сейчас заполню.

Затем, поскольку в наши дни иметь строку запроса - это супер не круто, я собираюсь создать «переписать», чтобы перенаправить /scores/* на score.html. Я открою firebase.json (он был создан везде, где вы firebase init) и поищу "hosting": {. Затем я ищу раздел под названием "rewrites": [ или при необходимости создаю его. Я обновлю это записью, которая выглядит так:

По сути, это означает, что любой URL-адрес, начинающийся с /scores/<some_user_id>, будет отображаться на scores.html страницу, которую я только что создал. Теперь весь раздел хостинга для моего проекта выглядит так:

Теперь я внедряю score.html. Сначала нахожу блок <style media=”screen”> и добавляю:

Это просто делает так, что абсолютно огромные скриншоты, загруженные в Cloud Storage, помещаются в маленькую квадратную штуку, отображаемую в центре экрана. В будущем я могу использовать это расширение для изменения размера изображения с целью экономии трафика и предоставления изображения, которое лучше соответствует размеру экрана пользователя.

Затем я нахожу <div id=”message”> и заменяю его некоторыми значениями-заполнителями, которые нужно заполнить с помощью JavaScript:

Я также удалю <p id=”load”>Firebase SDK Loading&hellip;</p> и после этого раздел <script>.

Затем я нахожу область, помеченную: <! — include only the Firebase features as you need -->, и заменяю ее на:

Поскольку мне нужен только Firebase Storage SDK для получения изображения и метаданных.

Теперь проницательные среди вас могут увидеть путь /__/firebase/ и задуматься о том, что происходит. Это уникальная функция хостинга Firebase, которая не только упрощает обращение к необходимым библиотекам Firebase, но и автоматически настраивает клиентский SDK.

Я также найду здесь минутку, чтобы сослаться на только что написанный мной score.js файл, добавив:

после:

Пришло время отобразить счет игрока. Откройте score.js и начните создавать забавное выражение с немедленным вызовом функции (IFEE), чтобы я мог использовать async/await, поскольку обещания таковы, что ES2015:

Я начинаю с захвата всех узлов, которые собираюсь обновить в остальной части функции.

Затем я получаю ссылку на хранилище firebase:

Затем я вытаскиваю идентификатор пользователя из пути:

Теперь я хочу сделать снимок экрана с момента смерти игрока. Если вы помните из моего предыдущего поста, я сохранил это в finalScores/<user_id>/finalScore.png, поэтому я беру ссылку на это место в Firebase Cloud Storage:

Теперь, когда у меня есть ссылка, мне нужно получить файл, чтобы отобразить его на моей странице. Я воспользуюсь getDownloadUrl, чтобы получить общедоступный URL-адрес, который я могу включить в свой тег <img>, и соответствующим образом обновлю элемент DOM:

Наконец, картинка стоит тысячи слов. Но важные слова для этой картины:

- это имя игрока (прямо сейчас 4AJZHCvV3vX6hvkEyvjxbreYJKZ2, пока я не добавлю имена пользователей), тот факт, что он Умер от удара мечом, и что у них не было никаких очков в течение всех 5 секунд, когда они были живы. В моем предыдущем посте я поместил эту информацию в Пользовательские метаданные моего справочника по облачному хранилищу. Поэтому я могу получить его с помощью:

Собирая все вместе, мой score.js выглядит так:

После внесения всех этих изменений я убеждаюсь, что firebase serve запущен. Затем с помощью консоли Cloud Storage найдите идентификатор пользователя, отправленный через Unity:

и введите это в адресной строке локального экземпляра Chrome как http://localhost:5000/scores/4AJZHCvV3vX6hvkEyvjxbreYJKZ2:

Если меня устраивает, я могу firebase deploy открыть новую страницу с результатами.

Обмен результатами

Последний фрагмент этой головоломки - облегчить обмен ссылками из моей игры на Unity. Начну с написания UserLinkManager:

Я в основном беру адрес swordchuck-challenge.web.app с хостинга Firebase и вставляю его в формат строки запроса, чтобы получить оценку. Сохранение его настраиваемости в редакторе с [SerializeField] упрощает временное тестирование на localhost или создание промежуточной среды, если я когда-нибудь почувствую в этом необходимость.

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

Следующие шаги

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

Теперь, когда у вас есть некоторое присутствие в Интернете, вы можете также изучить Динамические ссылки Firebase. Вы можете не только сократить этот гигантский URL-адрес, но и прикрепить к ссылке еще больше состояний. Вы даже можете иметь ссылки на глубину своей игры, возвращаясь к этой веб-странице, которую вы здесь создали!

Теперь было бы отличное время изучить другие сторонние API-интерфейсы, которые помогут навести порядок в совместном использовании. Вы не только сможете избежать хакерского копирования / вставки URL-адреса, как я сделал здесь, но вы также можете использовать многие службы аутентификации социальных сетей в качестве провайдеров входа в систему Firebase Authentication. Это означает, что вам больше не нужно создавать анонимные учетные записи, как я делал до сих пор, и вы можете начать сохранять пользовательские данные на разных устройствах!

Ресурсы

Вот некоторые дополнительные ресурсы, которые могут быть вам полезны: