天天看點

谷歌排行榜接入————最白話,手把手教你做系列。

谷歌排行榜看了很多教程,大部分人隻提了重點的:初始化,送出分數,顯示排行榜的幾個方法,很少有完整的可以直接導入項目直接使用的。而且隻能夠做個本地排序上傳一個最高分。對于我這樣的小白當然是選擇&()&…&*%&%¥%¥%¥…&

這裡就給個Unity裡接入谷歌排行的詳細步驟。

接入谷歌排行榜。

仍然分為兩個部分。

一,環境配置部分。

1,GooglePlayServices接入下載下傳位址

2,導入下載下傳的.Unitypage插件進Unity。

谷歌排行榜接入————最白話,手把手教你做系列。

導入插件後出現以下檔案,不同版本會有細微差别。比如

0.9.50版本插件

谷歌排行榜接入————最白話,手把手教你做系列。

和0.9.42插件

谷歌排行榜接入————最白話,手把手教你做系列。

3,配置谷歌服務。

谷歌遊戲服務不支援ios,0.9.50完全移除ios配置。

在unity中Windows下面這個位置。

0.9.50版本

谷歌排行榜接入————最白話,手把手教你做系列。

0.9.42版本

谷歌排行榜接入————最白話,手把手教你做系列。

如果你的配置出現的不可點選的問題。以下情況:

谷歌排行榜接入————最白話,手把手教你做系列。

則需要把你的buildsetting裡面的環境切換成android。

點選Android setup 出現以下頁面。

谷歌排行榜接入————最白話,手把手教你做系列。

把你得googleplay上配置的排行檔案 和web app client id填入對應位置。

配置檔案申請不再贅述,需要注冊谷歌開發者賬号25$,教程位址

然後點選Setup。

得到以下提示就Ok了。

谷歌排行榜接入————最白話,手把手教你做系列。

以上第一步結束,環境配置完成。

二,代碼部分。

public class Leaderboard : MonoBehaviour
{

    public static Leaderboard instance;
    //相關應排行榜id,可根據自己需求定義。
    public string endless_bestkill="CgkIjerK29sZEAIQAQ";
    public string endless_hilevel="CgkIjerK29sZEAIQBQ";
    public string warfog_bestkill="CgkIjerK29sZEAIQAg";
    public string warfog_hilevel="CgkIjerK29sZEAIQBg";
    public string warfog_survival="CgkIjerK29sZEAIQBA";
    public string hiarea_bestkill="CgkIjerK29sZEAIQAw";
    public string hiarea_hilevel="CgkIjerK29sZEAIQBw";

    protected bool isLogged;

    void Awake()
    {
        if (instance != null)
        {
            Destroy(gameObject);
            return;
        }

        DontDestroyOnLoad(gameObject);

        instance = this;
        PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
            // requests an ID token be generated.  This OAuth token can be used to
            //  identify the player to other services such as Firebase.
            .RequestIdToken()
            .Build();
        PlayGamesPlatform.InitializeInstance(config);
        // 檢視Google服務輸出資訊 recommended for debugging:
        PlayGamesPlatform.DebugLogEnabled = true;
        // Activate the Google Play Games platform
        //激活谷歌服務 
        PlayGamesPlatform.Activate();
        //判斷使用者是否登入
        SignIn();
        Debug.LogError("google play servers sign in");
    }

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }

    void SignIn()
    {
        // 認證使用者,判定使用者是否登入:
        Social.localUser.Authenticate((bool success) =>
        {
            if (success)
            {
                isLogged = true;
            }
            else
            {
                isLogged = false;
            }
        });
    }

    //取本地的HighScore與對應排行榜線上的分數作比較時,使用此方法,googlePlayLeaderboardID為排行榜ID
    public void reportScore(long HighScore,string googlePlayLeaderboardID)
    {
        if (!isLogged) {
            Debug.LogError ("isLogged or not");
            return;
        }
        PlayGamesPlatform.Instance.LoadScores(
            googlePlayLeaderboardID,
            LeaderboardStart.PlayerCentered,
            ,
            LeaderboardCollection.Public,
            LeaderboardTimeSpan.AllTime,
            (data) =>
            {
                if (data.Valid)
                {
                    int score = (int) data.PlayerScore.value;
                    Debug.LogError("score from inside leaderboard: " + data.PlayerScore.value);
                    Debug.LogError("formated score from inside leaderboard: " + data.PlayerScore.formattedValue);
                    if (score<HighScore) {
                        Social.ReportScore(HighScore, googlePlayLeaderboardID, (bool success) =>
                            {

                            });
                    }
                }
                else
                {
                    Debug.LogError("data invalid in leaderboard");
                }
            });
    }
    //在本地已經做了排序處理,隻送出自己需要送出的相關分數時 使用此方法,leaderboardIdToUse為對應排行榜ID
    public void reportScore(long score)
    {
        try
        {
            Social.ReportScore(score, leaderboardIdToUse, (bool success) =>
            {

            });
        }
        catch
        {

        }
    }


    //顯示排行榜
    public void showLeaderboard()
    {

     //顯示對應ID排行榜
        //PlayGamesPlatform.Instance.ShowLeaderboardUI(googlePlayLeaderboardID);
        //顯示所有排行榜
        Social.ShowLeaderboardUI();
    }

    //解鎖一個成就 對應地方引用該方法即可解鎖該成就
    public static void UnlockAnAchievement(string _achievementID)
    {


        Social.ReportProgress(_achievementID, f, (bool success) =>
        {

        });
    }


    //顯示成就頁面
    public static void ShowAchievementUI()
    {
        Social.ShowAchievementsUI();
    }

}
           

代碼成就ID填寫自己的排行榜ID即可, 送出分數可選擇自己對應的reportScore方法送出分數。顯示排行榜隻用調用showLeaderboard方法即可。

排行榜是谷歌提供的頁面,不用自己做對應的UI,成就的圖示也可以在Google背景做控制。

以上。