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