플레이페이브에 등록된 높은 점수가 차트에 바로 반영되지 못하는 이유와 대책
전제와 문제
Unity 게임의 백엔드에서 사용PlayFab하여 득점 랭킹 기능을 시도한다.
UpdatePlayerStatistics()
높은 점수(Play Statics)를 갱신했고, 그 반응이 돌아온 후GetLeaderboard()
차트(Leaderboard)를 땄지만, 지금 막 보낸 점수는 차트에 반영되지 않았다.하지만 시간이 지나고
GetLeaderboard()
반영되면서 플레이팹 관리 화면도 업데이트됐다.Unity 가상 코드
void Start()
{
PlayFabClientAPI.UpdatePlayerStatistics(
new UpdatePlayerStatisticsRequest() {
Statistics = new List<StatisticUpdate>() {
new StatisticUpdate() {
StatisticName = myStatisticName,
Value = myScore
}
}
}, OnUpdatePlayerStatisticsSuccess, OnFailure);
}
void OnUpdatePlayerStatisticsSuccess(UpdatePlayerStatisticsResult result)
{
GetLeaderboard();
}
void GetLeaderboard()
{
PlayFabClientAPI.GetLeaderboard(
new GetLeaderboardRequest() {
StatisticName = myStatisticName,
}, OnGetLeaderboardSuccess, OnFailure);
}
void OnGetLeaderboardSuccess(GetLeaderboardResult result)
{
var entries = result.Leaderboard; // これにmyScoreが反映されていないことがある
// entries を画面に表示する処理など
}
컨디션
forum 검색해 보기 (영어)
그러나 서버의 API 참조를 봐도 Update Leaderboard 방법을 찾을 수 없습니다.
네.
대책
UpdatePlayerStatistics()
하여 GetLeaderboard()
까지 시간을 비우는 화면, UX 디자인GetLeaderboardAroundPlayer()
도 이 방법을 사용하는 경우 자신의 리더보드Entry를 포함해야 하기 때문에 전자의 조건만 있으면 된다Unity 가상 코드
아까처럼 처리한 곳에서 사랑을 베다
void OnUpdatePlayerStatisticsSuccess(UpdatePlayerStatisticsResult result)
{
StartCoroutine("WaitAndGetLeaderboard", 2f);
}
void WaitAndGetLeaderboard(float waitSeconds)
{
yield return new WaitForSeconds(waitSeconds);
GetLeaderboard();
}
void OnGetLeaderboardSuccess(GetLeaderboardResult result)
{
var entries = result.Leaderboard;
var myEntry = entries.Find(_entry => _entry.PlayFabId == myPlayFabId);
if (myEntry != null && myEntry.StatValue < myScore
|| myEntry == null && entries.Count < requestedEntriesCount
|| myEntry == null && entries[entries.Count - 1].StatValue < myScore)
{
StartCoroutine("WaitAndGetLeaderboard", 1f);
return;
}
// entries を画面に表示する処理など
}
Cloud Script 프로세스를 사용하는 경우
원래 고객의 부정행위를 방지하기 위해서는
UpdatePlayerStatistics()
가 아니라 클라우드 스크립트로 Statiistics에 Update를 하는 것이 좋다Allow client to post player statistic
UpdatePlayerStatistics()
의 요청이 무효일 경우)그것대로라면 첫 번째 forum 검색 결과의
Cloud Script를 사용하여 Statics에 대한 Update와 함께 Leaderboard의 Update를 진행하고 Cloud Script가 되돌아온 후에 Leaderboard의 클라이언트 조회를 받는 것을 권장합니다.
"Statistics Update 후 Leaderboard Update 등"으로 교체하여 Cloud Script를 설치하는 것이 좋습니다.
API 단위로는 정답이라고 생각했는데 답장할 때마다 2초 이상 기다려야 하는 것도 이상하고...고민이에요.
더 좋은 방법이 있으면 알려주세요!
어렵기 때문에.
그런 고해상도 게임이 편입되어 있습니다. 유닛룸 씨, 구글 플레이스토어에서 안드로이드 버전을 공개합니다. 가능하면 하세요.
유닛룸의 유닛 1주일 게임 잼 투고 이후 이번 수법으로 고득점 기능을 추가했다.
https://unityroom.com/games/10to10
https://play.google.com/store/apps/details?id=com.zurachu.TenToTen
Reference
이 문제에 관하여(플레이페이브에 등록된 높은 점수가 차트에 바로 반영되지 못하는 이유와 대책), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/zurachu/items/569301f033052966c4fa
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(플레이페이브에 등록된 높은 점수가 차트에 바로 반영되지 못하는 이유와 대책), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/zurachu/items/569301f033052966c4fa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)