- Unity Android — гайды для начинающих
- Поиск по этому блогу
- Unity Android — как хранить данные на устройстве
- Unity3D + Google Services: мультиплеер для вашего проекта на Android и iOS
- Плагин
- Поднимаем мультиплеер
- Managing cloud storage
- Determining how much storage your Projects are using
- Adding more storage
- Cloud storage data retention
- Reducing your cloud storage usage
- Archiving Projects
- Archiving Projects for Collaborate
Unity Android — гайды для начинающих
Поиск по этому блогу
- Получить ссылку
- Электронная почта
- Другие приложения
Unity Android — как хранить данные на устройстве
- Получить ссылку
- Электронная почта
- Другие приложения
Для сохранения пользовательских данных необходимо использовать встроенные методы движка Unity. В этой статье мы рассмотрим самый простой способ их хранения.
Начнем с того, что в Unity есть синглтон PlayerPrefs, который реализует методы сохранения трех типов данных — строки, числа типа float и числа типа int.
Все данные сохраняются под ключами, как в словаре или ассоциативном массиве. Давайте рассмотрим это на примере кода.
Данная команда записала в словарь пользовательских данных число с типом int под ключом «name». Но просто прописать данную команду недостаточно: нужно подствердить сохранение. Для этого просто вызываем:
Вот пример сохранения других типов:
Чтобы получить значение, воспользуемся get методами:
string data = PlayerPrefs.GetString(«nickname»);
int number = PlayerPrefs.GetInt(«name»);
float money = PlayerPrefs.GetFloat(«money»);
Если до этой игровой сессии данные были занесены, методы вернут сохраненные значения.
Источник
Unity3D + Google Services: мультиплеер для вашего проекта на Android и iOS
В этой статье я хочу рассказать об использовании игровых сервисов Google в вашем приложении на Unity. На написание данного материала меня сподвигло достаточно большое количество проблем, встретившихся во время разработки нашего приложения, а также отсутствие каких-либо материалов на русском языке по этой теме. Да и собственно, на английском тоже. Описание использующегося плагина на гитхабе очень краткое и не дает ответа на возможные проблемы с работой сервисов. Думаю, здесь не стоит пояснять, что мультиплеер и рейтинги игроков зачастую повышают интерес пользователей, а следовательно и вашу возможную прибыль. А благодаря данной статье начинающие разработчики смогут начать использовать данные преимущества.
Плагин
Мы использовали бесплатный плагин Play Games For Unity. В нем содержатся библиотеки для работы с сервисами Google. Плагин включает в себя авторизацию пользователя в Google+, возможность использования достижений и рейтинга для игроков, облаков Google для хранения данных и организации мультиплеера как в реальном времени, так и в пошаговом режиме. Установка плагина не вызывает никаких трудностей: в Unity нужно выбрать импорт ассета (Assets->ImportPackage->CustomPackage) и в открывшемся окне выбрать ассет, находящийся в папке «current-build».
Далее вам нужно ввести id своего приложения: откройте появившийся выпадающий список «Google Play Games» и выберете пункт «Android Setup». Id приложения вы можете узнать в Google Developer Console. Он выдается после добавления нового приложения в «Игровые сервисы», вы можете видеть его рядом с названием вашей игры. После добавления id можно переходить непосредственно к коду.
Для инициализации плагина используйте следующий код:
PlayGamesPlatform.Activate(); достаточно вызывать лишь один раз после запуска вашего приложения. После инициализации вы можете получить доступ к платформе при помощи Social.Active.
Чтобы реализовать авторизацию пользователя используйте следующий код:
Переменная success принимает значения true при удачном входе и false, соответственно, при неудачном. В нашем случае при удачном входе вызывается метод загрузки необходимых данный пользователя из облака Google. И сразу же первая проблема, встретившаяся у нас на пути: метод вызывается, но при неудачной попытке не возвращает false, а следовательно авторизация не проходит и нет возможности при (!success) вызвать метод еще раз. Пришлось написать костыль, который вызывает метод с определенным интервалом, пока авторизация не пройдет (при условии, что пользователь подтвердил запрос на авторизацию перед этим).
После авторизации пользователя мы получаем возможность использовать сервисы Google.
Поднимаем мультиплеер
Кое-что из этого описано на гитхабе, кое-что на developers.google. Здесь я собрал полезную выжимку.
В плагине доступно 4 режима работы мультиплеера:
- Создание комнаты со случайными игроками (быстрая игра)
- Создание комнаты с экраном приглашения (позволяет приглашать в игру друзей из кругов Google+)
- Обзор приглашений (позволяет видеть, кто из друзей в Google+ хочет пригласить вас в игру)
- Приглашения по id (его рассматривать не будем, т.к. не использовали данный режим в нашем приложении; интересующиеся могут прочитать о нем по ссылке на Github)
Для того, чтобы облегчить работу со следующими функциями ваш класс должен наследоваться от интерфейса RealTimeMultiplayerListener.
Создать «быструю игру»/соединиться
Создается комната, куда набираются случайные оппоненты, или же происходит автоматическое присоединение к уже созданной комнате.
Очевидно, что минимальное и максимальное количество игроков определяется переменными MinOpponents, MaxOpponents. В нашей игре MaxOpponents = 1, это означает, что в мультиплеере у вас будет только один противник.
Если ваш класс наследуется от RealTimeMultiplayerListener, то вместо listener вам нужно написать this.
Создание комнаты с экраном приглашения
Почти идентично предыдущему. Игрок может пригласить друзей из Google+ или добавить случайных оппонентов.
Обзор приглашений
Откроется меню, в котором игрок может видеть свои приглашения из Google+.
Соединение с комнатой
Следующий метод позволяет показать пользователю загрузку во время создания или соединения с комнатой:
В нашем случае мы просто выводим переменную progress.
Когда соединение с комнатой произошло удачно (или нет) вызывается следующий метод:
В нашей игре для каждой онлайн гонки препятствия генерируются рандомно, и соответственно их положение должно быть одинаково на обоих телефонах. При успешном подключении из списка участников выбирается хост и на его телефоне генерируются препятствия. После того как они сгенерировались, сразу же начинается передача сообщений с параметрами уровня на другой телефон, и как только принимающий телефон загрузил последнее препятствие, он отправляет сообщение о том что готов и игра начинается. Также передается порядковый номер, используемого космического корабля, чтобы на экране другого игрока отображалась верная модель. Более того передаются различные служебные переменные, необходимые для определения готовности всех необходимых для игры параметров.
id участников
Чтобы узнать id всех участников, включая ваш, вы можете использовать следующий код (может выполняться только после соединения с комнатой).
Для всех участников лист будет отсортирован одинаково.
Для того чтобы узнать свой Id воспользуйтесь следующим методом:
Отправка сообщений:
Плагин поддерживает 2 типа сообщений, надежное и ненадежное. Надежное сообщение медленнее, но гарантирует доставку, ненадежное быстрее, но проверка доставки не осуществляется.
Для отправки надежного сообщения используется следующий код:
Соответственно для ненадежного следует изменить переменную reliable на false. Сообщение отправится всем участникам комнаты, кроме вас.
Вы так же можете отправить сообщение конкретному участнику:
Этим способом вы можете отправить сообщение сами себе, указав в participantId свой id.
Максимальная длина одного надежного сообщения – 1400 байт, ненадёжного 1168 байт.
Здесь также возникла проблема: даже если отправлять по одному сообщению за фрейм, то они не отправляются. Мы так и не выяснили с чем это связано, вероятно они просто не успевают формироваться (возможно кто-то в комментариях поправит меня). Поэтому был сделан счетчик фреймов и сообщения отправлялись через строго определенный интервал, измеряемый во фреймах. Тогда все стало работать великолепно. Во время игры наше приложение подразумевает постоянную отправку сообщений (координаты и угол поворота космического корабля), поэтому используются ненадежные сообщения, потому что скорость передачи выходит на первый план, а если пара пакетов и потеряется, то ничего страшного, при достаточно частой передаче человек практически не заметит этого. Но при присоединении игроков к комнате все отправляемые сообщения с параметрами участников и их кораблей являются надежными, так как отправляются только один раз и их значения критически важны для начала гонки.
Проверяем получение всех необходимых сообщений для начала игры:
Наконец-то после десятков билдов и тестов все начало работать:
Получение сообщений
Когда вы получаете сообщение, вызывается следующий метод:
Полученное сообщения полностью идентично отправленному, как по длине, так и по содержанию.
Так как в нашей игре используется множество различных сообщений (будь то координаты корабля, либо сообщение о выигрыше одно из участников и т.п.), чтобы понять какое сообщение принято, мы пошли на достаточно простой и очевидный шаг: первым байтом шло число, определяющее, что за сообщение и какой метод вызвать при его получении, а со второго байта начинались передаваемые данные.
События соединения
Если пользователь отключается от комнаты, вызывается следующий метод:
Важно: При сворачивании игры игрок отключается от комнаты. Возможно, для некоторых приложений это будет проблемой. Но в нашем случае сворачивание неминуемо привело бы к поражению, в виду специфики игры. Поэтому при отключении от комнаты одного из участников вызывается метод OnPeersDisconnected(), описанный далее.
Если кто-то подсоединяется или отсоединяется от комнаты, будут вызваны следующие методы.
Участники могут коннектиться в любое время во время игры, если есть пустые слоты, и тут надо следить, чтобы участник не подсоединился после того, как игра уже началась. Можно сделать ожидание, пока все слоты не заполнятся и только тогда начинать игру.
В нашей игре при досрочном выходе одно из участников отправляется сообщение, определяющее победу соперника и игра заканчивается, а следовательно нужно вызвать нижеследующий метод.
Выход из игры
После того, как ваша игра окончена, вам нужно выйти из комнаты:
Источник
Managing cloud storage
The Collaborate service uses cloud storage to backup your entire Project in the cloud and make it accessible anywhere.
This topic covers:
Determining how much storage your Projects are using
Cloud storage is calculated on a per Organization basis. Unity calculates the amount of cloud storage that your Organization is using by summing the size of the latest versions of all your Organization’s Collaborate Projects. Only the latest version of your project counts towards your storage limit. Historical (non-head) versions of your Projects do not count towards cloud storage.
To view your current storage usage:
- Sign into the Unity Developer Dashboard.
- Select a Project in the Organization whose storage you want to view.
- In the left navigation window, click Settings, then click Usage.
In the main Project window A window that shows the contents of your Assets folder (Project tab) More info
See in Glossary there are tiles that show:
- Cloud storage — How much storage the current Project is using compared to the rest of the Projects in your Organization, and your entire cloud storage space.
- Percent of storage per project — How much storage is used by each Project in your Organization.
- Storage used by
over time — How much storage the current Project has used since it was created, until the current time.
Adding more storage
You can obtain more cloud storage in two ways:
- Upgrade to Unity Teams Advanced, which also provides 25GB of cloud storage.
- Purchase Storage Packs on the Unity ID dashboard. Each storage Pack adds 25GB of cloud storage to an Organization.
Upgrading to Unity Teams Advanced
To upgrade to Unity Teams Advanced, visit the Unity Teams page at unity3d.com/teams. On the Unity Teams page you can learn more about the features of Unity Teams Advanced and then upgrade.
Purchase storage packs
To add storage packs:
- Sign in to the Unity ID dashboard.
- In the left navigation bar, click Organizations.
- In the main Organizations window, select an Organization.
- In the left navigation bar, click Service Usage.
- In the Usage overview window, click the Manage storage button.
- On the Add cloud storage dialog, select the amount of storage that you need, and then click the Continue to purchase button. If you have only one Organization, proceed to step 6.
- In the Checkout window, enter your payment information and then click Pay now.
Modifying your contracted amount of storage
- Sign in to the Unity ID dashboard.
- In the left navigation window, click Organizations.
- In the main Organizations window, select an Organization.
- In the left navigation bar, click Service Usage. The Service Usage window displays your contract period and the number of storage packs that you are contracted for.
- In the Usage overview window, click the Manage storage button.
- On the Add cloud storage tab, enter the number of storage packs to add.
- Click the Next button.
- In the Review order window, review the order information and then click the Confirm purchase button.
You can reduce the number storage packs on the Manage subscription tab:
- To remove all contracted storage packs, turn off Automatic Renewal. When automatic renewal is turned off, all storage packs are removed on the renewal date.
- To reduce the number of storage packs that are renewed, enter the number of storage packs to renew in the Select the number of storage packs you want to renew upon renewal field.
Then click the Save button.
Cloud storage data retention
If you’re using Unity Teams Advanced, Unity does not delete any version history for your Projects.
If you’re using Unity Teams Basic, Unity stores your data in cloud storage for at least 1 year. Unity reserves the right to delete Project history older than 1 year. You always have access to the latest version of your Project, but you only have access to the last 90 days of your version history. If you’re using Unity Teams Basic and want full access to the last 1 year of your history, you must upgrade to Unity Teams Advanced. When you upgrade to Unity Teams Advanced, you have access to your full history going forward.
Reducing your cloud storage usage
You have three options to reduce your cloud storage usage:
- Delete or reduce the size of Assets in your Project. It is important to remember that Project history does not count toward your cloud storage usage.
- Archive unused Projects. See Archiving Projects.
- Archive Projects for Collaborate only. Archiving a Project for Collaborate only allows you to free cloud storage space, while still being able to use other Unity services such as Ads, Analytics Abbreviation of Unity Analytics
See in Glossary , and Performance Reporting. See Archiving Projects for Collaborate.
Archiving Projects
Archiving a Project automatically archives any Collaborate cloud storage associated with the Project and Unity services are no longer accessible.
To archive a Project:
- Sign into the Unity Developer Dashboard.
- Select the Project to archive.
- In the left navigation bar, click Settings, then click General.
- At the bottom of the main window, read the important note and, if you are certain you want to archive the Project, click the Archive my Project for ALL Unity services button.
- In the Are you sure you want to archive this Project dialog, enter the name of the Project and then click the Yes, archive it button.
To unarchive a Project:
- Sign into the Unity Developer Dashboard.
- At the top right of the main window, under the CREATE NEW PROJECT button, click the View Archived Projects link.
- Locate the Project to reactivate, click the vertical ellipsis to the right of the Project name and then select Unarchive Project.
Archiving Projects for Collaborate
To archive a Project for Collaborate only:
- Sign into the Unity Developer Dashboard.
- Select the Project to archive.
- In the left navigation window, click Collaborate A Unity cloud-hosted service that provides a simple way for teams to save, share, and contribute to their Unity project. More info
See in Glossary , then click Storage. - In the main window, click the ARCHIVE button.
To unarchive a Project for Collaborate:
- Sign into the Unity Developer Dashboard.
- Select the Project to unarchive.
- In the left navigation window, click Collaborate, then click Storage.
- In the main window, click the UNARCHIVE button.
Источник