Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

UnityでiOSのGameCenterを利用するためのサンプルコード

More than 5 years have passed since last update.

概要

UnityでiOSのGameCenterを利用し、リーダーボードの表示とユーザーのスコアを送信する手順を説明します。

リーダーボード.PNG

プラグインなどは使わず、UnityEngine.SocialPlatformsを使っています。

手順

  • iTunes Connectでアプリ登録
  • iTunes Connectでリーダーボード登録
  • Unityで実装

iTunes Connectでアプリ登録

iOS Developer CenterでAppIDを登録後、iTunes Connectでアプリ登録しリーダーボードを有効にする必要があります。

参考
https://sites.google.com/a/gclue.jp/ios-docs/leader-boardtoachievementno-zuo-cheng

リーダーボードを登録し、登録した任意のリーダーボードIDを利用することになります。

Unityで実装

リーダーボードの表示とスコア登録のために、ひとつのユーティリティクラスにまとめました。

using UnityEngine;
using System.Collections;
using UnityEngine.SocialPlatforms;

public class RankingUtility {

    //ユーザー認証
    public static void Auth()
    {
        // 認証のため ProcessAuthenticationをコールバックとして登録
        // This call needs to be made before we can proceed to other calls in the Social API
        Social.localUser.Authenticate (ProcessAuthentication);        
    }

    // 認証が完了した時に呼び出される
    // 認証が成功した場合、サーバーからのデータがSocial.localUserにセットされている
    private static void ProcessAuthentication (bool success)
    {
        if (success) {
            Debug.Log ("Authenticated, checking achievements");


        } else {
            Debug.Log ("Failed to authenticate");
        }
    }

    // リーダーボードを表示する
    public static void ShowLeaderboardUI()
    {
        Social.ShowLeaderboardUI();
    }

    // リーダーボードにスコアを送信する
    public static void ReportScore (long score)
    {
        //このIDは任意の登録したものを使う
        string leaderboardID = "score";

        Debug.Log ("スコア " + score + " を次の Leaderboard に報告します。" + leaderboardID);

        Social.ReportScore (score, leaderboardID, success => {

            Debug.Log(success ? "スコア報告は成功しました" : "スコア報告は失敗しました");
        });
    }
}

利用方法

RankingUtility.Auth();

認証のためにまず最初に実行する。

RankingUtility.ReportScore(long score);

スコアをリーダーボードに送信する。

RankingUtility.ShowLeaderboardUI();

リーダーボードを表示する(モーダルで表示される)。
スコア送信時にリーダーボードを指定しているのに、表示には指定しないのが不思議に思うのは正解で、リーダーボードが複数あればそれを選ぶUIになるようです。

注意事項

  • XcodeでGameCenterを有効化にしておく
  • iTunesのテストユーザーを使う
    • サンドボックスなら自動的に現在のユーザーはログオフされる
    • テストユーザーをiTunes Connectから作成しておくこと

参考

Unity公式リファレンスマニュアル ソーシャルAPI
http://docs-jp.unity3d.com/Documentation/Components/net-SocialAPI.html

yimajo
株式会社キュリオシティソフトウェアの代表です。iOSアプリを作っています。最近はCombine frameworkガイドブック / RxSwift研究読本などを書いてます。
https://swift.booth.pm/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away