Найти тему
Денис Скрягин

Unity3D + Player.IO с загрузкой на Яндекс.Игры

Оглавление

Рассмотрим правильную реализации мультиплеерной игры на Unity для Яндекс.Игры с серверной частью находящейся на Player.IO.

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

Приступим

У меня еже имеется готовая игра для тестирования. Все основные взаимодействия с сервером работают в самом редакторе, и вот теперь вы хотите подготовить игру для Яндекс.Игр, загружаете билд, запускаете, и видите много ошибок.

Скринов ошибок у меня нет, но там будет что-то типа отказа в доступе к внешним источникам.

У Яндекса это сделано для обезопасивания рядового (да и не только) игрока от нежелательного контента.

Первое что нужно сделать

Нельзя использовать небезопасное соединение (если отправить хосты не проверку до установки безопасного соединения, вашу просьбу отклонят, при этом напишут на почту в чем причина).

С нашим сервером это делается просто, но чтобы это понять, у меня ушло 2 недели поисков.

Открываем скрипт на клиенте, а именно метод аутентификации. У меня он уже выглядит так

-2

Ваш код может отличаться, каждый реализует так как пожелает, но есть 2 обязательные строки, без которых вы не сможете взаимодействовать с сервером (подчеркнуты)

Первая - устанавливает свойство безопасного соединения для API. Запросы API будут зашифрованы.

Вторая - многопользовательские соединения будут зашифрованы.

Минус таких настроек - снижение производительности, так как требуется больше действие чтобы при каждом взаимодействии установить безопасное соединение.
Плюс - все данные передающиеся туда-сюда зашифрованы.

Второе что нам нужно сделать

Добавить хосты в список разрешенных. Сейчас это сделать проще, достаточно зайти в раздел настройки проекта, и в поле "Хосты" внести список нужных вам хостов. Она отправятся на проверку и если поддержка Яндекс не нашла причин вам отказать, доступ появится в течении 1-48 часов.

Вот список хостов которые обязательно нужно будет указать вам.

playerio.com
api.playerio.com
-3

Не забудьте описать свою причину использования хостов.
После одобрения - подключиться к серверу будет возможно.

Следующая проблема с которой столкнулся я..

Вот это ошибка

Error: The object returned from UnityLoader.instantiate() should be stored in a global variable on window somewhere. (e.g. window.gamelnstance = UnityLoader.instantiate(…)
Error: The object returned from UnityLoader.instantiate() should be stored in a global variable on window somewhere. (e.g. window.gamelnstance = UnityLoader.instantiate(…)

Понять из-за чего она и как решить её не смог даже с поддержкой Яндекс. Ежедневные напоминания о моей проблеме и всё такое ни к чему не привели. Прошло две недели, я продолжал лазать по форумам и наткнулся на пост, где решалась данныя проблема. И она оказалась крайне простой.

-5

Нужно прописать дополнительно вот эту строку в файл index и ошибка исчезнет.

window.gameInstance = unityInstance;

Думаю многие использую данный шаблон для index., а если в крации это место находится перед инициализацией SDK яндекса.

Конец

На данный момент это все трудности которые были у меня, но если появятся еще, обязательно напишу/дополню как я с ними разбирался.