GameCenterを登録してみた
1.LeaderBoardの追加
ランキングを表示するためのLeaderBoardを作成します
初めてのGameCenterなので右も左もわからない状況ですがなんとなくこんな感じで設定してみました。
スコアの範囲は最大値が以下の数値だったのでそのまま入れています。
Leaderboardができたら機能TabからAppleStoreタブに移動してGame Centerのチェックマークにチェックをつけて先ほど作成したLeaderboardを選択します
2.GameCenterにログインさせスコアを登録する
GameCenterへのログイン
func authenticateLocalPlayer() {
let player = GKLocalPlayer.local
player.authenticateHandler = {(viewController, error) -> Void in
if viewController != nil
{
self.present(viewController!, animated: true, completion: nil)
}
}
}
Leaderboardへのデータ送信
func sendLeaderboardWithID(ID:String, rate:Int64) -> Void {
let score = GKScore(leaderboardIdentifier: ID)
if GKLocalPlayer.local.isAuthenticated {
//スコアを設定
score.value = rate
print("success")
GKScore.report([score], withCompletionHandler: { (error) in
if error != nil {
// エラーの場合
print("error: \(String(describing: error))")
}
})
} else {
print("GameCenterにログインしていません")
}
}
3.Leaderboardでランキングを表示させる
私はのアプリはゲーム画面を全てSKSceneで作ってうまく遷移させることができなかったので、Notificationを飛ばしてSKSceneを乗っけているメインのViewControllerで以下のように遷移させました
@objc func openLeaderBordScoreLanking() {
let localPlayer = GKLocalPlayer()
localPlayer.loadDefaultLeaderboardIdentifier(completionHandler: {leaderboardIdentifier,error in
if error != nil {
print(error.debugDescription)
} else {
let gcvc:GKGameCenterViewController = GKGameCenterViewController()
gcvc.gameCenterDelegate = self
gcvc.viewState = .leaderboards
gcvc.leaderboardIdentifier = "munyu.score.ranking"
self.present(gcvc, animated: true, completion: nil)
}
})
}
extension ViewController: GKGameCenterControllerDelegate {
func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) {
self.dismiss(animated: true, completion: nil)
}
}