Android

15 nov, 2016

Ranking com Google Play Services em Unity3D – Parte 02

Publicidade

Olá, pessoal!

Nesse artigo vamos finalizar a série que mostra como usar o Google Play Services para gerenciar os sistemas de ranking e conquistas para o seu jogo.

A segunda parte, mostra como criar uma “class” para logar na plataforma, enviar um novo score, informar sobre a conquista adquirida e claro exibir os resultados.

Em todo caso, é recomendado que você tenha lido a Parte 01 que trata da configuração no painel do desenvolvedor do Android.

Agora, vamos lá!

Inicializando o Google Play Services

Abra um novo projeto no Unity (se quiser, pode usar um que já esteja trabalhando; não tem problema). Antes de mais nada, você precisar baixar o plugin GPGS para Android disponível no Github. Depois, basta acessar os arquivos baixados e importar o pacote em current-build/GooglePlayGamesPluginForUnity-X.YY.ZZ.unitypackage.

Crie um arquivo C# chamado, por exemplo, GooglePlayGame.cs. Agora, adicione um GameObject à cena e chame-o também de GooglePlayGame. Adicione o script a este GameObject.

Na classe criada, adicione os pacotes do plugin.

Vamos inicializar com a configuração básica. No método “Start”, adicione o seguinte código:

/// <summary>

/// Inicializa a pltaforma

/// </summary>

public static void Init()

{

PlayGamesPlatform.DebugLogEnabled = true;

// Ativando

PlayGamesPlatform.Activate();

}

Assim temos a plataforma ativa e com o debug ligado.

Logando

Com a plataforma ativa, podemos solicitar o login nela mesmo. Para isso, você deve criar um outro método que deve realizar duas verificações antes de tentar “logar”. São elas: verificar se a plataforma está ativa e se já não está logada. Ainda recomendo o uso de um callback que será chamado após o resultado da tentativa de autenticação. Veja:

// login

/// <summary>

/// Loga na pltaforma se já não estiver logado e a plataforma estivar ativa

/// </summary>

/// <param name=”onLogin”></param>

public static void Login(Action<bool> onLogin)

{

if(Social.Active == null)

{

Debug.LogError(“plataforma inativa”);

return;

}

if (IsAuthenticated())

{

return; // verificando se já está logado

}

Social.localUser.Authenticate((bool success) => {

Debug.Log(success);

if(onLogin != null)

onLogin(success);

});

}

Você pode precisar também de um método para verificar o status do login, algo como:

/// <summary>

/// Status da autenticacao

/// </summary>

/// <returns>true se está logado e false se não</returns>

public static bool IsAuthenticated()

{

return Social.localUser.authenticated;

}

screenshot_20161027-144040-e1477590830873

Enviando score

Depois de logar na plataforma, é possível enviar os dados. E, no caso do score, não precisaremos realizar qualquer tipo de comparação para saber se é o melhor resultado do jogador, ou não, pois tudo isso fica a cargo do serviço.

Aqui precisamos de dois parâmetros string que devem ser o ID do placar gerado no painel e a pontuação.

placar

/// <summary>

/// Reporta o score

/// </summary>

/// <param name=”scoreID”></param>

/// <param name=”score”></param>

/// <param name=”onReportScore”></param>

public static void ReportScore(string scoreID, int score,

Action<bool> onReportScore )

{

// post score

Social.ReportScore(score, scoreID, (bool success) => {

if (onReportScore != null)

{

onReportScore(success);

}

});

}

Liberando conquista

Aqui temos uma situação bem parecida com o ranking que apenas diferencia se a conquista é em etapas ou não.

/// <summary>

/// Incrementa as etapas da conquista

/// </summary>

/// <param name=”achievement”></param>

/// <param name=”points”></param>

/// <param name=”onIncrementAchievement”></param>

public static void IncrementAchievements(string achievement,

int points, Action<bool> onIncrementAchievement)

{

PlayGamesPlatform.Instance.IncrementAchievement(

achievement, points, (bool success) => {

if(onIncrementAchievement != null)

{

onIncrementAchievement(success);

}

});

}

/// <summary>

/// Reporta o progresso da conquista

/// </summary>

/// <param name=”achievementID”></param>

/// <param name=”progress”></param>

/// <param name=”onIncrementAchievement”></param>

public static void ReportProgressAchievements(string achievementID,

int progress, Action<bool> onIncrementAchievement)

{

Social.ReportProgress(achievementID, progress, (bool success) => {

if(onIncrementAchievement != null)

{

onIncrementAchievement(success);

}

});

}

Exibindo os resultados

E, finalmente, agora vamos exibir o que ganhamos. Teremos, então, duas chamadas diferentes e bem simples: uma para o ranking e outra para as conquistas.

/// <summary>

/// Exibe a tela de ranking com todos os placares

/// </summary>

public static void ShowLeadboards()

{

Social.ShowLeaderboardUI();

}

/// <summary>

/// Exibe conquistas

/// </summary>

public static void ShowAchievements()

{

Social.ShowAchievementsUI();

}

screenshot_20161027-144117

Uma interface padrão exibida para cada uma das chamadas.

Então, é isso! E claro que aqui temos apenas uma amostra do que podemos fazer com esse serviço fantástico do Google Play Services em jogos. Ele oferece muitas outras possibilidades além dessas, como, por exemplo, salvar o progresso nas nuvens para resgatar em outro aparelho com o mesmo login.

Até a próxima.

***

Artigo publicado originalmente em: http://www.fabricadejogos.net/posts/tutorial-ranking-com-google-play-services-em-unity3d-parte-2/