TapTapTap!!!(35)~Google Play Service for Unity をインポートする~
前回、前々回では Google Play Service for Unity が上手くインストールできず、幾度となく涙を飲んできたが今回はうまくインポートできそうなのでその手順をまとめていく。
1.play-games-plugin-for-unity-master をインポートする
プラグインのインポート手順については、TapTapTap!!!(16)~Google Play Services がインポートできない~に記載しているため省略する。前回までは青枠の「current-build」 をインポートしてきたが今回は「old-builds」の「GooglePlayGamesPlugin-0.9.21.unitypackage」をインポートする
インポートが完了するとインポート時のエラーがいくつか出力される。エラーの内容については以下の
- インターフェイスクラスに定義している関数が作成されていない
- ロガーを使用しているが、どのロガーを参照すればよいのかわからない
※ “インターフェイス” とは必ず作って欲しい関数をまとめて、管理や処理を簡略化するために用いる”クラスの形”指定専用クラスのこと
1-1.インターフェイスクラスに定義している関数を作成する
このエラーは「PlayGamesPlatform.cs」と「PlayGamesLocalUser.cs」で発生しており、以下の関数が無いということでエラーが起こっている。
「PlayGamesPlatform.cs」では以下の通り。
[cce_csharp]public void Authenticate(ILocalUser user, Action<bool, string> callback)[/cce_csharp]
そのため、一旦からの関数(何もしない)として実装しておく。
[cce_csharp]public void Authenticate(ILocalUser user, Action<bool, string> callback) { }[/cce_csharp]
「PlayGamesLocalUser.cs」では以下の通り。
[cce_csharp]public void Authenticate(Action<bool, string> callback)[/cce_csharp]
そのため、一旦からの関数(何もしない)として実装しておく。
[cce_csharp]public void Authenticate(Action<bool, string> callback) { }[/cce_csharp]
1-2.参照しているロガーを明示的に指定する
このエラーでは「GooglePlayGames.OurUtil.Logger」を使用すべきなのか、「UnityEngine.Logger」を使用すべきなのかがスクリプトで判断できずにエラーとなっている。今回の出力方式では「GooglePlayGames.OurUtil.Logger」を採用すべきなので、「GooglePlayGames.OurUtil.Logger」を明示的に使用するよう指定する。具体的に示すとスクリプト上部に using がいくつか記載されている箇所がある。その最後に以下の一行を追加する。
using Logger = OurUtils.Logger;
2.実機で動作確認用にビルドを行う
1-1.および、1-2.のエラーを解消しビルドを行うと以下のように、「[ゲームプロジェクトファイルパス] is missing AndroidManifest.xml file.」というエラーファイルが出力される。
これを解決するために [Project] タブ > [Plugins] > [Android] > [MainLibProj] に「AndroidManifest.xml」ファイルを追加する。「AndroidManifest.xml」に記載する内容は以下の通り。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.games.bridge" android:versionCode="1" android:versionName="1.0" > <application/> </manifest>
更にエラーが増えると思うので次に、[BuildSystem] を [Internal] に変更することでビルドが行える。
3.実機確認用に apk ファイルをアップロードする
ビルドが完了したので実際にアップロードを行うと以下のようにアップロードのエラー画面となった。Internal に変更することで、プライバシーポリシーの設定が必要になるとのことなので、StudioFun のプライバシーポリシーページを一時的に参照させることにした。
プライバシーポリシーの設定は Google Play コンソールから設定変更ができる。任意のアプリを選択後、右側メニューの [ストアでの表示] > [ストアの掲載情報] を選択し、下部のプライバシーポリシーを入力する。その後「アップデートを送信」ボタンをクリックするとプライバシーポリシーの設定更新が行われる。
その後、いつもの手順でアプリをアップロードすることができるようになる。
4.実機で確認を行う
アップロード完了後、Google Play Store から本アプリをダウンロードした。その後、デバッグモードでログを確認しながら動作確認を行うと以下のようなエラーが出力された。
InvalidOperationException: There was an error creating a GameServices object. Check for log errors from GamesNativeSDK
Unity が認識している Google Play Game SDK が古すぎることが原因とのこなので、Unity から Google Play Game SDK のアップデートを行う。
5.Google Play Game SDK のアップデートを行う
Google Play Game SDK のアップデートは上部メニューの [Window] > [Google Play Games] > [Downloads] > [Google Play Games SDK(Android)] から行う。
[Google Play Games SDK(Android)]をクリックすると以下の画面が表示される。
確認画面1では「Google Play Game SDK for Android をダウンロードするには Android SDK Manager を起動する必要があります。」
確認画面2では「Android SDK Manager が起動したら “Google Play Service” パッケージをダウンロードするか、アップデートしてください。”Extras”カテゴリ内にあります」とのこと。
が起動しない。これは Android SDK Manager と Unity のバージョンに互換性がなくなってしまっていることが原因なので、手動で SDK の設定を更新する。まずは Unity の環境設定画面を表示する必要があり上部メニューの [Edit] > [Preferences…] をクリックする。
[Preferences…] をクリックすると、以下の環境設定画面が表示されるので [External Tools]を表示し、Android SDK の場所を確認する。
環境設定をするためにはまず、 Android Studio を起動し赤枠から Android Studio の SDK マネージャーを表示する。
Android Studio の SDK マネージャーを表示した後、[Android SDL] > [SDK Tools] > [Google Play ~~~] を選択し [OK] ボタンをクリックする。
ダウンロードが完了するとダウンロード先が表示されるので環境設定画面と同じ場所にダウンロードされていることを確認する。その後、 Unity を再起動してビルドをやり直すが、ダメ。
もう少しだとは思うのですが・・・