いんでぃーづ

ゲームいろいろ、いろいろ自由

Unity : Google Game Service ログイン実装 - Android 公式 無料プラグイン使用

今まで Google Play Games のログインはアセットストアのものを使っていたのですが、Google公式のプラグインに載せ替えたのでまとめ。


DeveloperConsoleでゲームをセットアップ

Unityプロジェクトを開く前に、PlayDeveloperConsoleでゲームサービスの設定をしておきます。

Redirecting...

f:id:sugar_affordance:20170211000308j:plain

ここでイベント、実績、リーダーボードのどれかをセットアップする必要があります。

f:id:sugar_affordance:20170211000350p:plain

セットアップしたら「リソースを取得」から、Unityプロジェクトで使うXMLテキストを取得できるので後で使います。

f:id:sugar_affordance:20170211000634j:plain

f:id:sugar_affordance:20170211090945j:plain

SHA-1フィンガープリントを登録

Androidアプリをリリースする際にキーストアを作ってアプリに署名しますが、このファイルから取得できるSHA-1フィンガープリントをコンソールに登録しなければサインインできません

.keystore ファイルを作成したら、以下のコマンドを打ちます。

keytool -list -v -keystore [keystoreファイルのPATH] -alias [エイリアス名] -storepass [keystoreのパスワード] -keypass [keyのパスワード]

出てきた「SHA1」欄の文字列を使います。

コンソールのメニューで「リンク済みアプリ」を選択し、「別のアプリをリンク」をクリック。

f:id:sugar_affordance:20170211090325j:plain

進んでいくとSHA-1フィンガープリントを登録する画面が出るので、さきほど取得した文字列を入れます。
すでに登録済みの場合は入力画面は出ません。

unitypackageをインポート

[公式github(https://github.com/playgameservices/play-games-plugin-for-unity)からZIPをダウンロードし、current-build ディレクトリ内の GooglePlayGamesPlugin-0.9.36.unitypackage をダブルクリックしてUnityプロジェクトにインポートします。

下のようなエラーが出たら、いさぎよく関連ディレクトリを全て削除(Admobなども使ってたら全部)してから再度インポートするとエラーは消えると思います。

Assets/PlayServicesResolver/Editor/ResolverVer1_2.cs(55,32): error CS0115: `GooglePlayServices.ResolverVer1_2.ShouldExplode(string)' is marked as an override but no suitable method found to override
Assets/PlayServicesResolver/Editor/ResolverVer1_2.cs(24,35): error CS0246: The type or namespace name `ResolverVer1_1' could not be found. Are you missing an assembly reference?

PlatformをAndroidに切り替える

Unityメニューの File > Build Settings とクリックしてAndroidを選択し、ビルドプラットフォームを変更します。
切り替えることではじめてセットアップダイアログを使えるようになります。

プロジェクトのセットアップ

Unityメニューの Window > Google Play Games > Setup > Android setup ...とクリック。セットアップダイアログが表示されます。

f:id:sugar_affordance:20170211001015p:plain

ここからプロジェクト設定をstaticクラスとして出力します。

Directory to save constants には出力したいディレクトリ、Constants class name にクラス名を入力。
Resources Difinition にコンソールで取得したXMLをペースト。

「Setup」ボタンを押すとクラスが出力されます。

サインインしてみる

さっそくサインインしてみます。

using GooglePlayGames;
using GooglePlayGames.BasicApi;
using UnityEngine.SocialPlatforms;

public class GoogleServiceManager : MonoBehaviour
{
     void Start () {

        // 初期化
        PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
            .Build();

        PlayGamesPlatform.InitializeInstance(config);
        PlayGamesPlatform.Activate();


        // サインイン実行
        Social.localUser.Authenticate((bool success) => {

            if (success) {
                // サインイン成功!
            }
        });
    }

サインインするだけなら、これだけのコードでいけます。
アプリ側で権限の確認画面が出てきたら成功。

リーダーボード

UI表示は一行。

        Social.ShowLeaderboardUI();

スコア登録もこれだけ。

        Social.ReportScore("スコア", "リーダーボードのID", (bool success) => {
            // handle success or failure
        });

実績

UI表示は一行。

        Social.ShowAchievementsUI();

実績解放は以下のとおり

        Social.ReportProgress('実績ID', 0.0f, (bool success) => {
            // handle success or failure
        });

第二引数は実績の進捗。0で解放。100で完了。


後書きというか自戒というか愚痴

なんで今更載せ替えたのかというと、自分のゲームのパーミッションに GET_ACCOUNTS が入っているにもかかわらずプライバシーポリシーのURLを載せたりなんやりするのを怠っていて、Googleから注意を受けてしまったんですね。
でもGooglePlayService使ってるからなあ、機能消すしかないかなあと思ってたら、

自分が勝手に勘違いしていたのですが、GameService使うのに特別なパーミッションは必要ないみたいでした。
使っていたアセットが勝手に追加していたわけです。

もう自分の愚かさを呪ったと同時にアセットを呪った。そして捨てた。

そしてやっぱり無料でこれだけのプラグイン公開してるGoogle様様。


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。