Создание рейтинга игроков для мобильной игры (Unity + Google Play Game Services)

    Рейтинг игроков (leaderboard, scores) для мобильной игры — вещь интересная и порой даже необходимая. В этой статье я расскажу о том, как добавить рейтинг игроков в приложение, созданное в Unity, т.к. в рунете информации об этом не так много. Кроме того, рейтинг будет кросплатформенный (android + iOS), однако без поддержки Windows Phone.

    image

    Раздел 1. КОНСОЛЬ РАЗРАБОТЧИКА

    1. Считаем, что приложение уже опубликовано на Google Play, т.е. у нас есть package name, например com.AnonymousInteractives.NakedSnake

    2. Идем в [консоль разработчика] (Developer Console), слева открываем [игровые сервисы] (Game Services)

    image

    3. Жмем «Добавить новую игру» и указываем название игры и категорию. Тут может возникнуть некоторая путаница. Термин «игра» здесь означает игровой сервис. Название может не совпадать с реальным названием вашего приложения. У игрового сервиса появляется уникальный идентификатор, например 88171208539
    image

    4. Заполняем [сведения об игре] — описание и картинки

    5. В разделе [связанные приложения] можно связать с игровым сервисом до 20 приложений. Это могут быть android, iOS и web приложения. Выбираем android. Далее нужно только ввести название пакета приложения из пункта 1

    image

    6. В разделе [достижения] нужно добавить достижения. Для тестирования пункт можно пропустить, но для публикации нужно добавить не менее 5 достижений. Если у нас в игре нет достижений, то просто создаем фейковые достижения 1, 2, 3, 4, 5 и забываем про них

    7. Наконец мы переходим в раздел [рейтинг игроков]. Создаем необходимые нам рейтинги, тут все очевидно. В итоге получаем рейтинг с каким-нибудь идентификатором, например CgkI276nu8gCEAIQAA. Впоследствии он и идентификатор игрового сервиса понадобятся нам для настройки плагина в Unity и обращения к сервису

    image

    8. В разделе [тестирование] можно добавить аккаунты для тестирования. Причем можно указать именно почтовые аккаунты, а не группу Google+, как при тестировании самой игры

    9. В разделе [публикация] можно опубликовать игру, хотя для тестирования это не обязательно. Все, консоль разработчика нам больше не понадобится

    Раздел 2. Unity

    1. Переходим на страницу проекта play-games-plugin-for-unity и скачиваем проект (ссылка «Download ZIP»). В архиве находим файл GooglePlayGamesPlugin-0.9.02.unitypackage

    2. Открываем проект приложения в Unity

    3. Дважды кликаем по GooglePlayGamesPlugin-0.9.02.unitypackage и импортируем пакет в проект

    image

    4. Переходим в меню File / Play Games — Android setup и вводим идентификатор нашего сервиса (см. шаг 3 из предыдущего раздела). Все, на этом настройка завершена!

    image

    5. Теперь осталось добавить пару строчек кода и у нас появится рейтинг игроков. Графический интерфейс рейтинга находится в Android SDK, так что нам не придется тратить на него время. В тоже время, никакой кастомизации UI не предусмотрено (кроме настроек в консоли разработчика — иконка рейтинга и единица измерения). На странице плагина (см. пункт 1) находится достаточно справочной информации, поэтому я без комментарием приведу код внесения записи в рейтинг игроков с последующим его отображением. Замечу, что процесс асинхронный, и на каждое действие приходит callback. Из-за этого могут возникнуть затруднения при внесении записей сразу в несколько рейтингов. Как вариант — реализация цепочек из callback. Альтернативно можно вызывать ReportScore параллельно и обрабатывать все callback таким образом, чтобы только последний из них открывал рейтинг вызовом ShowAchievementsUI

    PlayGamesPlatform.DebugLogEnabled = true;
    PlayGamesPlatform.Activate();
    
    Social.localUser.Authenticate(authenticated =>
    {
    	if (!authenticated || !Social.localUser.authenticated)
    	{
    		throw new Exception();
    	}
    
    	Social.ReportScore(1000, "CgkI276nu8gCEAIQAA", (bool success) =>
    	{
            if (success)
    		{
    			Social.ShowAchievementsUI();
    		}
    		else
    		{
    			throw new Exception();
    		}
        });
    });
    


    Раздел 3. Заключение

    К сожалению, пока нет поддержки Windows Phone. Там все совсем печально, вас ждет низкоуровневая реализация взаимодействия с Azure и написание своего UI, готовое и рабочее решение найти не удалось.
    На этом пока все, спасибо за внимание. В дальнейшем, если кому-то будет интересно, могу рассмотреть процесс создания web-приложения для модерации рейтингов (удаления читеров, например), т.к. в консоли разработчика нет для этого никаких средств.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 11

      +1
      Не знаю ни одного примера игр для iOS или Android, в которых таблицы лидеров не были бы взломаны. Теряется весь интерес к достижению более высокого результата, когда видишь что топ забит просто невероятными показателями.
        0
        Необходимо реализовывать защиту, например шифрование профиля в памяти и при сохранении. Могу утверждать, что в моей игре (100.000 активных игроков) читеров практически нет, удаляю парочку за месяц.
          +2
          По мне, так парочка читеров в таблицах лидеров — это уже много. Когда популярность игры будет выше, чистить рейтинги будет всё сложнее и сложнее. Мы в своём продукте решили не пользоваться решениями ни Google, ни Apple, и реализовали собственную систему рейтингов, но у нас онлайн игра.
            0
            А не могли бы вы рассказать немного подробнее, что у вас за система?
              +1
              Игра на Unity. Для коммуникации используем MuchDifferent UnityPark. В качестве базы MongoDB. Во время игры игроки набивают очки, которые инкрементируются к трём полям в профиле: дневной рейтинг, недельный, и месячный. С определенным интервалом ТОП-50 результатов кешируются в лобби и по запросу вытягиваются игроками в такую вот таблицу:

              image

              Поскольку все операции с профилем производятся на сервер-сайде, взлом рейтингов невозможен.
          0
          Не знаю ни одного примера игр для iOS или Android, в которых таблицы лидеров не были бы взломаны.

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

          «Limits are optional values that define the lower and upper limits of scores that are allowed in the leaderboard. This can help you discard score submissions that are clearly fraudulent. You can also use Players.hide to hide players that you believe have submitted fraudulent scores from all leaderboards in your app.»
          +1
          А это случаем не симулятор России (логотип в рейтинге)? Я его «хакал» — ставил дату на 11 месяцев (на 12 ругалась прога) вперёд, прокачивался и дальше
            –1
            Да, скриншот из него, но к статье это не имеет никакого отношения.
            0
            У вас ошибка. «Social.ShowAchievementsUI();» вместо «Social.ShowLeaderboardUI();»
              0
              А дайте ссылку на ассет пожалуйста?
                0
                https://github.com/playgameservices/play-games-plugin-for-unity

              Only users with full accounts can post comments. Log in, please.