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);
    }
}

태그:

카테고리:

업데이트:

댓글남기기