네트워크: 보물찾기(2) Leaderboard API
1. Leaderboard 사용시 주의사항
-
Update Rule: 점수 업데이트 방식
- Max score: 유저의 최고 점수를 기록.
- Min score: 유저의 최소 점수를 기록.
- Accumulate score: 유저의 점수를 누적 합산해 등록.
예를 들어, 캐릭터가 보물을 먹을 때마다 점수가 누적되게 하고 싶다면 ‘Accumulate score’ 룰을 사용하면 된다.
이걸 제대로 모르고 ‘Max score’ 룰로 구현하려다 엄청 애먹었다.
-
Leaderboard ID 값을 Zepetoscript에 넣었을 때, 해당 Leaderboard ID를 찾을 수 없다고 한다면, zepeto 앱을 빌드하면 해결된다.
-
Leaderboard 를 생성할 때는 수정이 안되니 주의한다.
2. OnTriggerEnter 와 Exit으로 Leaderboard API 사용하기
Leaderboard API의 룰이 ‘Accumulate score’ 라면, .SetScore의 인수인 this.score는 rankInfo.myRank.score의 누적 피연산자가 된다.
이걸 몰라서 초반에 무척 애먹었다.
그리고, rankInfo.myRank.score는 초기화가 되지 않으니 주의하자.
import { Collider } from 'UnityEngine';
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { LeaderboardAPI, ResetRule } from 'ZEPETO.Script.Leaderboard';
import { GetRangeRankResponse } from 'ZEPETO.Script.Leaderboard';
export default class tressureHit extends ZepetoScriptBehaviour {
public leaderboardId: string;
public startRank: number;
public endRank: number;
public resetRule: ResetRule;
public score: number; // 누적할 점수
Start() {
}
OnTriggerEnter(coll: Collider) {
LeaderboardAPI.SetScore(this.leaderboardId, this.score, this.OnResult, this.OnError);
}
// 점수를 보내는데 시간이 발생함
// Enter < 점수를 보냄
// Exit < 점수를 받음
OnTriggerExit(coll: Collider) {
LeaderboardAPI.GetRangeRank(this.leaderboardId, this.startRank, this.endRank, this.resetRule, false, this.OnResult, this.OnError);
console.log(this.score);
}
OnResult(result: GetRangeRankResponse) {
if (result.rankInfo.myRank) {
console.log(`${this.score} / ${result.rankInfo.myRank.score}`);
// console.log(`member: ${result.rankInfo.myRank.member}, rank:
// ${result.rankInfo.myRank.rank}, score: ${result.rankInfo.myRank.score}, name:
// ${result.rankInfo.myRank.name}`);
}
// if (result.rankInfo.rankList) {
// for (let i = 0; i < result.rankInfo.rankList.length; ++i) {
// var rank = result.rankInfo.rankList.get_Item(i);
// console.log(`i: ${i}, member: ${rank.member}, rank: ${rank.rank}, score: ${rank.score}, name: ${result.rankInfo.myRank.name}`);
// }
// }
}
OnError(error: string) {
console.log(error);
}
}
댓글남기기