¿La API del complemento de servicios de Google Play de Unity no está sincronizada con la función de interfaz de usuario de Show Leaderboard?

Utilizo Google Play Games Services Unity Plugin para crear un juego para Android como se describe en: https://github.com/playgameservices/play-games-plugin-for-unity

El problema:

Cuando carga puntuaciones usando el API (objeto de API social o PlayGamesPlatform.Instance del plugin google play), obtengo puntajes desactualizados . Pero, cuando uso la función ShowLeaderBoardUI () en su lugar, las puntuaciones son correctas en la GUI.

Así que no hay ningún problema en publicar las puntuaciones.

Utilizo el siguiente fragmento para cargar las puntuaciones de los usuarios en el Cuadro de resultados de Google Play Game Services:

void LoadUsersAndDisplay(int leaderBoardID,ILeaderboard lb,LeaderBoardEntry[] resultingEntries) { // get the user ids List<string> userIds = new List<string>(); foreach(IScore score in lb.scores) { userIds.Add(score.userID); } // load the profiles and display (or in this case, log) PlayGamesPlatform.Instance.LoadUsers(userIds.ToArray(), (users) => { string status = "Leaderboard loading: " + lb.title + " count = " + lb.scores.Length; int currentUserIndex = 0; foreach(IScore score in lb.scores) { IUserProfile user = users[currentUserIndex]; status += "\n" + score.formattedValue + " by " + (string)( (user != null) ? user.userName : "**unk_" + score.userID + "**"); resultingEntries[currentUserIndex] = new LeaderBoardEntry(score.rank,user.userName,score.value); currentUserIndex++; } // Get the local user score LeaderBoardEntry localUserEntry = new LeaderBoardEntry(lb.localUserScore.rank, Social.localUser.userName,lb.localUserScore.value); // Notify the observers about the receiving of the scores foreach (LeaderBoardObserver currentObserver in observers) { Debug.Log ("Notifying the leaderboard observer"); currentObserver.OnScoresReceived (leaderBoardID,resultingEntries,localUserEntry); } Debug.Log(status); }); } public void getScores(int lbID){ ILeaderboard lb = PlayGamesPlatform.Instance.CreateLeaderboard(); lb.id = leaderboards [lbID].lbOfficialID; lb.timeScope = TimeScope.AllTime; lb.userScope = UserScope.Global; LeaderBoardEntry[] resultingEntries = null; lb.LoadScores(ok => { if (ok) { resultingEntries = new LeaderBoardEntry[lb.scores.Length]; LoadUsersAndDisplay(lbID,lb,resultingEntries); } else { Debug.Log("Error retrieving leaderboardi"); } }); Debug.Log ("Have " + observers.Count + " lbObservers"); } 

Tengo la salida siguiente cuando imprimo el leaderboard recibido:

 >>Leaderboard loading: Quick Reaction Mode World Ranking count = 1 >>I/Unity (16088): 45 by firatercis 

Pero cuando muestro las puntuaciones de todos los tiempos para los usuarios globales, tengo la siguiente captura de pantalla:

Introduzca aquí la descripción de la imagen

Primero, el marcador estaba vacío, anoté 45 puntos. Vi el punto 45 en ambos lados no había ningún problema. Luego anoté 50. Pero el resultado que logré por el API nunca se actualiza.

He eliminado y reinstalado el juego, no. He limpiado la caché de la aplicación, y no debería haber ninguna copia del número 45 en cualquier lugar, pero constantemente obtener 45 puntos mediante el uso de la API. Por favor ayuda, ¿dónde puedo estar equivocado?

Puede que su configuración no se haya completado como se muestra en la documentación:

Añade logros y tablas de clasificación a tu juego en la Consola para programadores de Google Play. Para cada logro y tabla de líderes que configure, asegúrese de anotar el ID de logro o el ID de clasificación correspondiente, ya que serán necesarios al realizar las llamadas a la API. El logro y los ID de la tabla de líderes son cadenas alfanuméricas (por ejemplo, "Cgkx9eiuwi8_AQ").

Vuelva a comprobar su código.

He solucionado este problema mediante el cambio LeaderboardManager.LoadLeaderboardData () para utilizar Types.DataSource.NETWORK_ONLY vs CACHE_OR_NETWORK.

Asegúrate de que la configuración de la tabla de clasificación de la Consola para programadores de Google Play sea la que has diseñado. En particular, asegúrese de que la ordenación esté definida en "Mayor es mejor" y que no tiene ningún conjunto de límites . Tal vez toggling "Habilitar la protección contra manipulaciones" también es una buena idea …

Yo habría escrito esto como un comentario y pidió alguna aclaración, pero no tengo los puntos de reputación. 🙁

  • Unity exporta proyecto androide con problema de Facebook SDK
  • Plugin de Android con Google Fitness API para Unity3D
  • Error: No se puede crear FMOD :: Instancia de sonido para recurso sharedassets0.resource al dividir el binario de la aplicación en Unity
  • ¿La API social de Unity necesita algunos complementos para Android?
  • Error de compilación de Unity3D
  • MonoGame vs Unity3D
  • Error de codificación de vídeo que utiliza datos OnAudioFilterRead
  • Carga del modelo AR a través del toque de botón en Android
  • Unity3D Android acelerómetro y giroscopio controles
  • ¿Cómo recuperar la ID de juegos de google con la nueva actualización de juegos de Google ID de jugador?
  • Cómo chocar objetos con alta velocidad en Unity
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.