개요
안드로이드 게임을 개발하면서 구글에서 서비스되는 플레이 게임 서비스를 많이 이용합니다.
구글에서는 유니티에서도 쉽게 구글 플레이 게임 서비스(이하, GPGS)를 구현할 수 있도록 플러그인을 제공하고 있지요.
게임에 GPGS를 이용하여 리더보드를 구현하여 실시간 랭킹 정보를 출력하는 기능을 구현하는 경우, 리더보드의 새로운 정보가 들어오지 않는 문제가 발생합니다.
이건 플러그인에서 네트워킹을 최소화하기 위해 데이터를 캐시하여 사용하기 때문인데요.
캐시데이터가 삭제되기 전까진 이미 저장된 데이터만 출력이 가능하게 되는 거죠.
글로벌 타겟으로 이용하는 리더보드라서 데이터량이 많을 수도 있기 때문이겠죠?
이 문제를 해결하기 위해서는 플러그인의 코드를 조금 수정해야 합니다.
해결방법
플러그인을 프로젝트에 추가하면, 아래의 경로에 위치한 LeaderboardManager.cs 파일을 오픈하여 편집합니다.
Path : Project Folder/Assets/GooglePlayGames/Platforms/Native/PInvoke/LeaderboardManager.cs
위 파일을 오픈하면 LoadLeaderboardData (string leaderboardId, ...) 메서드를 찾을 수 있습니다.
찾으셨다면 아래와 같이 수정하고 저장하시면 리더보드 정보를 호출 할 때마다 새로운 정보를 받아올 수 있습니다.
public void LoadLeaderboardData(string leaderboardId,
LeaderboardStart start,
int rowCount,
LeaderboardCollection collection,
LeaderboardTimeSpan timeSpan,
string playerId, Action<leaderboardscoredata> callback) {
.
.
.
C.LeaderboardManager_Fetch(mServices.AsHandle(),
Types.DataSource.CACHE_OR_NETWORK, // 이 부분을 Types.DataSource.NETWORK_ONLY 으로 변경
leaderboardId,
InternalFetchCallback,
Callbacks.ToIntPtr<fetchresponse>((rsp) =>
HandleFetch(token, rsp, playerId, rowCount, callback),
FetchResponse.FromPointer));
}