1. はじめに

最終更新日: 2022 年 10 月 18 日
PC 版 Google Play Games 向けにゲームを準備するにはどうすればよいですか?
Google Play Games を使用すると、モバイルゲームを Windows PC に簡単に移植できます。つまり、ゲームのアーキテクチャを再構築したり、ビジネスモデルを再設計したりすることなく、プレーヤーのエンゲージメントとユーザーベースを拡大できます。新しい PC プレーヤーに最高の体験を提供するために、まだいくつかの変更を行う必要があります。
学習内容
この Codelab では、ゲームをリリースするための要件のチェックリストの基本部分について説明し、PC 版 Google Play Games 向けに Unity ゲームを準備する方法を紹介します。Play Games ログインや Play Integrity API などのより詳細な統合については、対象外です。
- Unity から x86 アーキテクチャ向けにビルドする方法。
- Google Play Games エミュレータでテストしてデプロイする方法。
- PC で見栄えがよくなるようにユーザー インターフェースを変更する方法。
- Google Play Games エミュレータで実行されているかどうかを検出し、それに応じてゲームを適応させる方法。
必要なもの
- Unity 2020 LTS のインストール(この Codelab は 2020.3.30f1 で作成されています)。
- Google Play Games エミュレータ。
2. セットアップする
新しいプロジェクトを開くか作成する
- 2D Platformer Microgame を使用して新しいプロジェクトを作成するか、独自のプロジェクトを開きます。

- プロジェクトから [File] -> [Build Settings] を選択し、Android 向けにビルドするように設定されていることを確認します。

3. Google Play Games エミュレータを準備する
まず、エミュレータをダウンロードします。
インストールすると、ウィンドウに Android デスクトップが表示されます。

これは、ゲーム開発に適した高パフォーマンスのフル機能の Android 環境です。Android Debug Bridge(adb)で localhost のデバイスとして表示されます。
❯ adb devices List of devices attached localhost:6520 device
エミュレータを検出するには、adb の最新バージョンが必要です。Android Studio にバンドルされているバージョンは動作しますが、Unity に同梱されている adb は動作しない可能性があります。互換性のあるバージョンはエミュレータにバンドルされており、C:\Program Files\Google\Play Games Developer Emulator\current\emulator で確認できます。開発エクスペリエンスを最適化するには、Android Studio をインストールして、Android SDK の管理に使用することをおすすめします。
エミュレータが adb から切断された場合は、次のようにコマンドラインから再接続します。
adb connect localhost:6520
4. エミュレータに直接ビルドしてデプロイするように Unity を構成する(省略可)
Unity に同梱されている adb のバージョンがエミュレータと互換性がない場合があります。確認するには、[File] -> [Build Settings] を選択し、[Run Device] ダイアログでデバイスがリストされているかどうかを確認します。

プロジェクト、ビルドプロセス、快適さのレベルに応じて、Google Play Games エミュレータに直接デプロイするように Unity を構成するか、APK をビルドして adb install で手動でデプロイするかを選択できます。手動でデプロイする場合は、変更は最小限で済みますが、イテレーション サイクルが遅くなる可能性があります。
次の 2 つの手順でエミュレータに直接デプロイします。
- 別の Unity SDK(理想的には Android Studio によってインストールされたもの)を使用するように Unity を構成します。
- Unity のバグを回避するため、ビルドツールのバージョンを更新しました。
Unity に同梱されている Android SDK のバージョンではエミュレータが検出されない可能性があるため、Android Studio を使用して新しい SDK をインストールします。
- Android Studio を開き、[Edit] -> [Preferences] -> [External Tools] を選択します。
Android SDK Tools Installed with Unityのチェックを外し、Android Studio のインストール パス(通常はAppData/Local/Android/sdk)を指定します。Android NDKオプションはそのままにします。

接続されたデバイスを更新すると、ビルド ウィンドウに Google HPE device (localhost:6520) が表示されます。

このバグの状態と Unity のバージョンによっては、ビルドツールのバージョンも変更する必要があります。そのためには、mainTemplate.gradle と launcherTemplate.gradle を生成していることを確認します。
- [Project Settings] ウィンドウを開いて [Player Settings] に移動し、
Publishing Settingsセクションを見つけます。 - [ビルド] オプションまでスクロールし、[カスタム メイン Gradle テンプレート] と [カスタム ランチャー Gradle テンプレート] をオンにします。これにより、
Assets\Plugins\Android\の下に両方の Gradle ファイルが生成されます。

- 文字列
**BUILDTOOLS**のインスタンスを30.0.0に置き換えます。両方のファイルで、コードのセクションは次のようになります。
android {
compileSdkVersion **APIVERSION**
buildToolsVersion '30.0.0'
5. Chromebook にデプロイする(省略可)
ChromeOS デバイスを使用すると、Google Play Games エミュレータにアクセスしなくても、Google Play Games 向けのゲーム開発を開始できます。PC 版 Google Play Games と同様に、Chromebook にはキーボードとマウスが搭載され、大画面で x86 構成で利用できます。Chromebook で Android Logcat Unity プラグインを使用します。
- パッケージ マネージャーを開き、
Unity RegistryでAndroid Logcatを検索します。

また、Android 開発用に Chromebook を設定する必要があります。まず、Linux を有効にします。
- [設定] -> [デベロッパー] -> [Linux] を選択します。
![Linux サポートを有効にする方法を示すアニメーション画像。[設定] ウィンドウで [デベロッパー] が選択されている。次に、](https://codelabs.developers.google.com/static/android-google-play-games-unity-quickstart/img/9664c14f1d329783.gif?hl=ja)
次に、ADB デバッグを有効にします。
- [設定] -> [デベロッパー] -> [Linux 開発環境] -> [Android アプリを開発する] -> [ADB デバッグを有効にする] を選択します。
![ADB デバッグは [開発者向けオプション] メニューから有効になっています。](https://codelabs.developers.google.com/static/android-google-play-games-unity-quickstart/img/c77a8f58ee77bf50.gif?hl=ja)
Chromebook の IP アドレスも取得します。これを行う最も簡単な方法は、
- [ネットワーク情報] アイコンをクリックして、Chromebook の IP アドレスを取得します。


- [Window -> Analysis -> Android Logcat] を選択して、Android Logcat ウィンドウを開きます。
![Unity で [Window] > [Analysis] を開きます。](img/a1a76bed69791616.png)
- デバイスリストを開きます。現在接続されているデバイスがない場合は、
No Deviceと表示されることがあります。

- [その他の接続オプション] をクリックして、Chromebook の IP アドレスを入力します。
![[その他の接続] ウィンドウが開きます。IP アドレスが入力されている。](https://codelabs.developers.google.com/static/android-google-play-games-unity-quickstart/img/1abfd0bc46900228.png?hl=ja)
- [接続] をクリックします。[成功] ウィンドウが表示されます。

Chromebook が Unity の [Run Device] リストに表示されます(最初に画面を更新する必要がある場合があります)。

Chromebook にゲームをデプロイして、PC のようなハードウェアでテストと開発を開始できるようになりました。
6. テストビルドをデプロイする
Google Play Games では、ゲームの x86 バージョンをデプロイする必要があります。これは、デスクトップ PC でパフォーマンス ベンチマークを達成するための要件の一部です。Unity のすべての LTS バリアントは、x86 および x86-64 互換の Android ビルド(「Chrome OS」とラベル付け)を生成できます。また、Unity バージョン 2018 以前では、x86 ビルドを生成できます。これらのアーキテクチャをアンロックするには、まず IL2CPP スクリプト バックエンドに切り替える必要があります。これは、arm64 サポートのためにすでに本番環境で行っている可能性があります。
- [File] -> [Build Settings] を選択して [Build Settings] ウィンドウを開き、[Player Settings] をクリックします。

- [その他の設定] セクションに移動し、
Scripting BackendをIL2CPPに切り替えます。

x86 または x86-64 のサポートも有効にする必要があります。Google Play Games プラットフォームでリリースするには、x86 のみをサポートする必要があります(x86-64 を推奨)。
![[Player Settings] の [Configuration] セクションのスクリーンショット](https://codelabs.developers.google.com/static/android-google-play-games-unity-quickstart/img/d6536f3ca8a12ca7.png?hl=ja)
Unity にバンドルされている フレーム ペーシング ライブラリのバージョンも Google Play Games と互換性がなく、ゲームの起動時にクラッシュが発生します。
- Player Settings ウィンドウでフレーム ペーシングを無効にするには、Resolution and Presentation セクションを開き、[Optimized Frame Pacing] のチェックを外します。

これでビルドの準備が整いました。
- [Build Settings] ウィンドウを再度開き、[Build And Run] をクリックします。エミュレータ ウィンドウにゲームが表示されます。

ゲームをデプロイできない場合は、[Run Device] リストに [Google HPE device (localhost:6520)] が表示されているかどうかを確認してください。見つからない場合は、HPE_Dev が実行中で、Android のホーム画面が表示されていることを確認します。それでもデバイスリストに表示されない場合は、使用している adb.exe を正確に指定して adb connect localhost:6520 を実行します。Android Logcat Unity プラグインを使用している場合は、[Tools] -> [Open Terminal] を選択して、Unity が使用しているものと同じ adb.exe を含むディレクトリのターミナルを開きます。
[ターミナルを開く] がハイライト表示されている" style="width: 624.00px" src="img/9101ce3c95fb1aa2.png" srcset="img/9101ce3c95fb1aa2_36.png 36w, img/9101ce3c95fb1aa2_48.png 48w, img/9101ce3c95fb1aa2_72.png 72w, img/9101ce3c95fb1aa2_96.png 96w, img/9101ce3c95fb1aa2_480.png 480w, img/9101ce3c95fb1aa2_720.png 720w, img/9101ce3c95fb1aa2_856.png 856w, img/9101ce3c95fb1aa2_960.png 960w, img/9101ce3c95fb1aa2_1440.png 1440w, img/9101ce3c95fb1aa2_1920.png 1920w, img/9101ce3c95fb1aa2_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px">
7. PC 向けにゲームを適応させる
可能な場合は、プラットフォームに依存しない指標や特定の機能の有無に基づいてゲームに変更を加えるようにしてください。たとえば、Android でマウスとキーボードを接続したり、モニターを接続したりできます。デバイス構成に応じて操作方法や HUD 要素を変更することで、サポートされているすべてのプラットフォームで PC 版 Google Play Games の機能を活用できます。
プレーヤーが Google Play Games または ChromeOS にいるかどうかに基づいてロジックを変更することが妥当な場合は、このスクリプトは HPE_EXPERIENCE システム機能をチェックして検出するのに役立ちます。
using UnityEngine;
public class GoogleDeviceUtilities
{
#if UNITY_ANDROID && !UNITY_EDITOR
private static AndroidJavaObject PackageManager
{
get
{
var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var currentActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
return currentActivity.Call<AndroidJavaObject>("getPackageManager");
}
}
public static bool IsChromeOS => PackageManager.Call<bool>("hasSystemFeature", "org.chromium.arc");
public static bool IsGooglePlayGames =>
PackageManager.Call<bool>("hasSystemFeature", "com.google.android.play.feature.HPE_EXPERIENCE");
public static bool HasKeyboard
{
get
{
var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var currentActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
var resources = currentActivity.Call<AndroidJavaObject>("getResources");
var configuration = resources.Call<AndroidJavaObject>("getConfiguration");
var keyboard = configuration.Get<int>("keyboard");
return keyboard == 2; // Configuration.KEYBOARD_QWERTY
}
}
#else
public static bool IsChromeOS => false;
public static bool IsGooglePlayGames => false;
public static bool HasKeyboard => true;
#endif
}
PC は一般的な Android スマートフォンよりもディスプレイが大きくなっています。可能であれば、HUD は画面の 20% を超えないようにすることをおすすめします。多くのモバイルゲームでは「画面サイズに合わせて拡大縮小」が使用されているため、これを「物理サイズを一定に保つ」または「ピクセルサイズを一定に保つ」に変更することは、この目標を達成するための良い第一歩となります。

Google Play Games で実行されていることを検出した場合は、実行時に QualitySettings.SetQualityLevel コマンドを使用して品質設定を動的に設定することもできます。Google Play Games エミュレータは ANGLE を使用して、OpenGL Unity から出力されたネイティブの DirectX または Vulkan コマンドを発行するため、モバイルゲームのビルドで利用可能だったものよりも高いグラフィックの忠実度を実現できる可能性があります。
8. 入力処理
Google Play Games でリリースされるゲームは、マウスとキーボードの入力に対応するように構築する必要があります。マウスとキーボードでゲームを操作する方法を計画する必要があります。今すぐ Input SDK unitypackage を入手してください。このページにダウンロードが表示されない場合は、play-mp-libs グループのアカウントでログインしていることを確認してください。
テスト目的で、多くのゲームはエディタでの開発用に基本的なマウスとキーボードのコントロールを構築しています。可能であれば、ChromeOS デバイスまたは Google Play Games エミュレータで実行しているときに有効にすることをおすすめします。
デフォルトでは、Google Play Games と ChromeOS はマウス入力をシミュレートされたタッチに変換します。Input.GetTouch と Input.touchCount を使用している場合、ゲームは引き続き想定どおりに動作します。両方の親指による操作やピンチによるズームなどのマルチタッチ入力に依存している場合は、アクションをキープレスにマッピングする必要があります。また、ゲーム内のアクションをキー押下にマッピングする必要があります。たとえば、i を押すとインベントリが開く、Esc を押すとダイアログ ボックスが閉じる、Enter を押すとゲーム内のメッセージが送信されるなどです。
2D Platformer Microgame では、矢印キーで移動し、Space キーでジャンプします。独自のゲームを使用している場合は、次のステップで必要なキーバインディングが設定されていることを確認してください。
9. Input SDK の統合
マウスとキーボードの操作を設定したら、Input SDK のサポートを追加する必要があります。これにより、便利なポップオーバーで PC 入力を確認できるようになります。
- SDK をプロジェクトにインポートしたら、
InputMappingProviderBehaviour.csというファイルを作成し、次の内容を追加します。
using System.Collections.Generic;
using Google.Play.InputMapping;
using UnityEngine;
using Input = Google.Play.InputMapping.Input;
public class InputMappingProviderBehaviour : MonoBehaviour
{
private void Start()
{
Input.GetInputMappingClient().RegisterInputMappingProvider(new MyInputMappingProvider());
}
private class MyInputMappingProvider : InputMappingProvider
{
public InputMap OnProvideInputMap()
{
return new InputMap
{
InputGroups = new List<InputGroup> { },
MouseSettings = new MouseSettings
{
InvertMouseMovement = false,
AllowMouseSensitivityAdjustment = false
}
};
}
}
private enum ActionIds
{
}
}
- 次に、ゲームで使用しているアクションのリストを
ActionIdsに入力します。2D Platformer Microgame の場合、アクションは Left、Right、Jump です。
private enum ActionIds
{
Left,
Right,
Jump
}
OnProvideInputMapで、アクションごとにInputActionを作成します。これには、アクションの名前、入力、およびそれにバインドされるマウスボタンまたはキーコードが必要です。サンプルゲームの場合:
var leftAction = new InputAction
{
ActionLabel = "Walk Left",
UniqueId = (int)ActionIds.Left,
InputControls = new InputControls
{
AndroidKeycodes = new[]
{
AndroidKeyCode.KEYCODE_DPAD_LEFT
}
}
};
var rightAction = new InputAction
{
ActionLabel = "Walk Right",
UniqueId = (int)ActionIds.Right,
InputControls = new InputControls
{
AndroidKeycodes = new[]
{
AndroidKeyCode.KEYCODE_DPAD_RIGHT
}
}
};
var jumpAction = new InputAction
{
ActionLabel = "Jump",
UniqueId = (int)ActionIds.Jump,
InputControls = new InputControls
{
AndroidKeycodes = new[]
{
AndroidKeyCode.KEYCODE_SPACE
}
}
};
- 次に、これらの入力アクションをグループにまとめます。
このマイクロゲームではグループは 1 つだけですが、プレイヤーが必要なアクションを見つけられるように、必要な数だけ作成できます。OnProvideInputMap に以下を追加します。
var movementInputGroup = new InputGroup
{
GroupLabel = "Movement",
InputActions = new List<InputAction>
{
leftAction, rightAction, jumpAction
}
};
- 作成した入力グループをすべて入力マップに追加します。
OnProvideInputMapの return ステートメントを次のように変更します。
return new InputMap
{
InputGroups = new List<InputGroup> { movementInputGroup },
MouseSettings = new MouseSettings
{
InvertMouseMovement = false,
AllowMouseSensitivityAdjustment = false
}
};
- 最後に、作成したスクリプトをゲームに追加します。

- ゲームを再度デプロイするときは、
Shift+Tabを押してゲーム内オーバーレイを開きます。

- [コントロール] をクリックして、設定したコントロールを表示します。

10. 埋め込みウェブビューを削除する
プレーヤーに優れたエクスペリエンスを提供するため、埋め込みウェブビューを削除する必要があります。プライバシー ポリシーや利用規約などの項目を表示するために、埋め込み WebView を使用するのが一般的です。これらは Google Play Games で動作しますが、プレーヤーが選択したデスクトップ ブラウザではなく、埋め込みの「モバイル」ブラウザに表示されるため、PC プレーヤーに混乱を招く可能性があります。そのため、Unity で埋め込みブラウザを表示する拡張機能を使用している場合は、Application.OpenURL(url) にフォールバックします。
11. 権限と機能
Google Play Games では、多くの Android の機能と権限がサポートされていません。一般的なルールとして、PC ビルドで権限ダイアログが表示されることはありません。ビルドの準備ができたら、一般的な新規インストールを実行し、表示されたダイアログをすべて書き留めて、ゲームの送信に関する「タスク」リストに追加することをおすすめします。
一部の Unity ゲームは、Android.Permission API を使用して権限をリクエストします。これらを if (GoogleDeviceUtilities.IsGooglePlayGames) チェックでラップし、該当する場合は失敗ロジックに直接進む必要があります。
12. パソコンの最適化
Google Play Games は一般的な Android スマートフォンとは異なる点がいくつかあるため、ゲームをそれに応じて設定する必要がある場合があります。
テクスチャ圧縮に DXT に切り替えます。ETC などの一般的な Android テクスチャ形式は、プレーヤーの GPU に直接渡すことができない場合、実行時にメモリ内でデコードされます。ASTC はデスクトップとの互換性が最も高いですが、ゲームの想定される動作を確認するには、デスクトップ GPU プロファイリング ツールを使用する必要があります。

デスクトップ GPU で実行しているため、グラフィックの品質を向上させることもできます。これは、[プロジェクト設定] の [画質] で直接調整できます。

13. 完了
これで、Google Play Games 向けのゲームの開発を開始する準備が整いました。ゲームのテストと反復処理を開始できます。同じコードベースを維持できますが、ゲームを PC ネイティブ ゲームのように感じられるように調整する必要があります。
次のステップ
Google Play Games でゲームをリリースするには、さらに多くの作業が必要です。
- 最新情報については、クイックスタートをご覧ください。
- Play Games サービス ログイン v2 にアップグレードすると、起動時にプレーヤーが自動的にログインし、継続性要件を満たすことができます。
- Play Integrity API を実装して、PC での体験をモバイルでの体験と同じくらい安全なものにしてください。
最後に、Google Play Games をサポートするためにこれまで行ってきた作業の多くは、ChromeOS でのリリースにも役立ちます。PC とともに、このプラットフォームのサポートも検討してください。