1. はじめに
最終更新日: 2022 年 4 月 25 日
PC 版 Google Play ゲーム向けにゲームを準備するにはどうすればよいですか。
Google Play ゲームを利用すると、モバイルゲームを Windows PC に簡単に移行できます。つまり、ゲームの再構築やビジネスモデルの再設計を行わなくても、プレーヤーのエンゲージメントやユーザーを増やすことができます。新しい PC プレーヤーに最適なエクスペリエンスを提供するには、いくつかの点を変更する必要があります。
学習内容
この Codelab では、ゲームを軌道に乗せるための要件チェックリストの基本部分を取り上げ、PC 版 Google Play ゲーム向けに独自の Unity ゲームを準備する方法について説明します。Play ゲームへのサインオンや Play Integrity API など、より深い統合については説明しません。
- Unity から x86 アーキテクチャ用にビルドする方法
- Google Play ゲーム エミュレータをテストしてデプロイする方法。
- ユーザー インターフェースを変更して PC で最適に表示されるようにする方法。
- Google Play ゲーム エミュレータで動作しているかどうかを検出し、それに応じてゲームを調整する方法。
必要なもの
- Unity 2020 LTS インストール(この Codelab は 2020.3.30f1 で作成されました)。
- Google Play ゲーム エミュレータ
2. 設定する
新しいプロジェクトを開く、作成する
- 2D Platformer Microgame を使って新しいプロジェクトを作成するか、独自のプロジェクトを開きます。
- プロジェクトで [File] -> [Build Settings] を選択し、Android 用にビルドするように設定されていることを確認します。
3. Google Play ゲーム エミュレータを準備する
まず、こちらのページからエミュレータをダウンロードします。ダウンロード リンクが表示されない場合は、play-mp-emu グループに追加されているアカウントでログインしていることを確認してください。このエミュレータ アップデートが利用可能になると、このグループのメンバーに通知が届きます。そのため、play-mp-emu@googlegroups.com からメールを受信できることを確認してください。
インストールすると、Android デスクトップがウィンドウに表示されます。
これは、ゲーム開発に適した多機能の高性能 Android 環境です。Android Debug Bridge(adb)に、ローカルホストでデバイスとして表示されます。
❯ adb devices List of devices attached localhost:6520 device
エミュレータを検出するには、最新バージョンの adb が必要です。Android Studio にバンドルされているバージョンは機能しますが、Unity に付属する adb は機能しません。互換性のあるバージョンはエミュレータにバンドルされており、C:\Program Files\Google\HPE_Dev\emulator
で入手できます。快適にご利用いただくには、Android Studio をインストールして Android SDK を管理することをおすすめします。
エミュレータが adb から切断された場合は、次のようにコマンドラインから再接続します。
adb connect localhost:6520
4.直接エミュレータをビルドしてデプロイするように Unity を構成する(省略可)
Unity に付属の adb のバージョンは、エミュレータと互換性がない場合があります。確認するには、[File] -> [Build Settings] を選択し、[Run Device] ダイアログにリストが表示されるかどうかを確認します。
プロジェクト、ビルドプロセス、快適度に応じて、Unity を構成して Google Play ゲーム エミュレータに直接デプロイするか、APK をビルドして adb install
で手動でデプロイするかを選択できます。手動でのデプロイにはごくわずかの変更が必要ですが、イテレーション サイクルは遅くなる可能性があります。
次の 2 つの手順でエミュレータに直接デプロイします。
- 別の Unity SDK(理想的には Android Studio によってインストールされた SDK)を使用するように 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
] セクションを見つけます。 - [Build] オプションまで下にスクロールし、[Custom Main Gradle Template] と [Custom Launcher Gradle Template] をオンにします。これにより、両方の Gradle ファイルが
Assets\Plugins\Android\
に生成されます。
- 文字列
**BUILDTOOLS**
の任意のインスタンスを30.0.0
に置き換えます。どちらのファイルでも、コードのセクションは次のようになります。
android { compileSdkVersion **APIVERSION** buildToolsVersion '30.0.0'
5. Chromebook へのデプロイ(省略可)
Chrome OS デバイスを使用すると、Google Play ゲーム エミュレータにアクセスせずに Google Play ゲーム向けのゲームの開発を開始できます。PC 版 Google Play ゲームと同様に、Chromebook はキーボードとマウスを備え、大画面で、x86 構成で利用できます。ここでは、Chromebook で Android Logcat Unity プラグインを使用します。
- パッケージ マネージャーを開き、
Unity Registry
でAndroid Logcat
を検索します。
また、Android 開発用に Chromebook を設定する必要があります。まず、Linux を有効にします。
- [設定] -> [デベロッパー] -> [Linux] を選択
ADB デバッグを有効にします。
- [設定] -> [デベロッパー] -> [Linux 開発環境] -> [Android アプリの開発] -> [ADB デバッグを有効にする] を選択します。
また、Chromebook の IP アドレスを取得する必要があります。最も簡単な方法は、
- ネットワーク情報アイコンをクリックして、Chromebook の IP アドレスを取得します。
- [Window] -> [Analysis] -> [Android Logcat] を選択して、[Android Logcat] ウィンドウを開きます。
[Analysis を開きます Unity] で、[Android Logcat] が選択されています。" class="l10n-absolute-url-src" l10n-attrs-original-order="alt,style,src,class" l10n-encrypted-style="7ek2XYbAbHCf3eKVqUfzlU8zz2uYoEmRhrQeP6/mnhY=" src="https://codelabs.developers.google.com/android-google-play-games-unity-quickstart/img/a1a76bed69791616.png" style="width: 446.00px" />
- デバイスリストを開くと、現在接続されていない場合は
No Device
と表示されることがあります。
- [その他の接続オプション] をクリックして、Chromebook の IP アドレスを入力します。
- [接続] をクリックします。[Success] ウィンドウが表示されます。
これで Unity の [Run Device] リストに Chromebook が表示されます(画面を更新することが必要な場合があります)。
Chromebook にゲームをデプロイし、PC のようなハードウェアでテストや開発を開始できます。
6. テストビルドをデプロイする
Google Play ゲームを利用するには、x86 バージョンのゲームをデプロイする必要があります。これは、デスクトップ パソコンでパフォーマンス ベンチマークを達成する方法のひとつです。 Unity の LTS バリアントはすべて、x86 および x86-64 と互換性のある Android ビルド(「Chrome OS」というラベルが付いています)を生成し、Unity バージョン 2018 以前で x86 ビルドを生成できます。これらのアーキテクチャを利用するには、まず IL2CPP スクリプト バックエンドに切り替える必要があります。本番環境では arm64 をサポートしており、IL2CPP スクリプトのバックエンドをすでに使用している可能性が高いです。
- [File] -> [Build Settings] を選択して [Build Settings] ウィンドウを開き、[Player Settings] をクリックします。
- [Other Settings] セクションに移動し、
Scripting Backend
をIL2CPP
に切り替えます。
また、x86 または x86-64 のサポートを有効にする必要もあります。Google Play ゲーム プラットフォームで配布するには x86 のみをサポートする必要がありますが、x86-64 を推奨します。
Unity バンドルの Frame Pacing ライブラリのバージョンも Google Play ゲームと互換性がなく、リリース時にゲームがクラッシュします。
- [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] を選択して、同じ adb.exe
を使用するディレクトリへのターミナルを開きます。
[ターミナルを開く] がハイライトされた [Android Logcat] Unity ウィンドウのスクリーンショット" class="l10n-absolute-url-src" l10n-attrs-original-order="alt,style,src,class" l10n-encrypted-style="Bfmtwp4MR0V5uTC1s3uklU8zz2uYoEmRhrQeP6/mnhY=" src="https://codelabs.developers.google.com/android-google-play-games-unity-quickstart/img/9101ce3c95fb1aa2.png" style="width: 624.00px" />
7. PC 向けにゲームを適応させる
可能であれば、プラットフォームに依存しない指標や、特定の機能の有無に基づいてゲームに変更を加えるようにしてください。たとえば、Android のプレーヤーはマウスとキーボードを接続したり、モニターを接続したりできます。そのため、デバイス設定に応じてコントロール スキームや HUD 要素を変更すると、サポートされているすべてのプラットフォームで PC 版 Google Play ゲームを活用できます。
プレーヤーが Google Play ゲームまたは Chrome OS を使用しているかどうかに基づいてロジックを変更するのが適している場合、このスクリプトは 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 ゲームでの実行を検出した場合、実行時に QualitySettings.SetQualityLevel
コマンドを使用して品質設定を動的に設定することもできます。Google Play ゲーム エミュレータは、ANGLE を使用して OpenGL Unity が出力するネイティブ DirectX または Vulkan コマンドを発行するため、モバイルゲームのビルドよりも高いグラフィック フィデリティを実現できます。
8. 入力の処理
Google Play ゲームで出荷されるゲームは、マウスとキーボードでの入力を中心に構築する必要があります。マウスとキーボードでゲームを操作する方法を計画する必要があるので、時間をかけて Input SDK unitypackage を入手してください。このページでダウンロードが表示されない場合は、play-mp-libs グループのアカウントでログインしていることを確認してください。
テストを目的として、多くのゲームはエディタで開発するための基本的なマウスおよびキーボード コントロールを構築します。可能であれば、Chrome OS デバイスまたは Google Play ゲーム エミュレータで実行するときに有効にすることをおすすめします。
Google Play ゲームと Chrome OS では、デフォルトでマウス入力がシミュレートされたタッチに変換されます。Input.GetTouch
と Input.touchCount
を使用する場合、ゲームは期待どおりに動作します。デュアルサム コントロールやピンチ操作によるズームなどのマルチタッチ入力に依存している場合は、アクションをキーの押下にマッピングする必要があります。ゲーム内のアクションをキーの押下にマッピングすることもできます。たとえば、I キーを押して在庫を開き、Esc キーを押してダイアログ ボックスを閉じ、Enter キーを押すことです。ゲーム内メッセージを送信します。
2D プラットホーム マイクロゲームは、矢を使って移動、ジャンプします。独自のゲームを使用している場合は、次のステップで使用する優先キー バインディングがあることを確認します。
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 プラットホーム マイクロゲームの場合、アクションは「左」、「右」、「ジャンプ」です。
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. 広告と埋め込みウェブビューを削除する
更新する必要のあるロジックのすべては説明しませんが、すぐに承認してアプリを承認し、プレーヤーに素晴らしいエクスペリエンスを提供するためにすぐに対処できるアイテムが 2 つあります。
まず、プライバシー ポリシーや利用規約のような項目の表示には、埋め込みのウェブビューを使うのが一般的です。Google Play ゲームでは機能しますが、プレーヤーが使用するデスクトップ ブラウザではなく、組み込みの「モバイル」ブラウザに表示されるため、PC プレーヤーが混乱する可能性があります。そのため、Unity では、拡張機能を使用して埋め込みブラウザを表示する場合は Application.OpenURL(url)
にフォールバックします。
第 2 に、Google Play ゲームでは、広告は現在許可されていません。ただし、モバイル SDK と Chrome OS プレーヤーでは、広告 SDK をそのままにしておくことができます。GoogleDeviceUtilities.IsGooglePlayGames
を使用して、ゲーム内広告を含めるかどうかを決定します。その他の支払い関連の API(Google Pay など)は想定どおりに機能します。
11. 権限と機能
Google Play ゲームでは、多くの Android 機能と権限がサポートされています。一般的な経験則としては、PC のビルドで権限ダイアログをポップアップ表示しないでください。これでビルドの準備が整いました。通常の新規インストールを行い、表示されたダイアログを書き留め、「ゲーム」を送信するために「ToDo」リストに追加してください。
一部の Unity ゲームでは、Android.Permission API を使用して権限をリクエストします。可能な場合は、これらのイベントを if (GoogleDeviceUtilities.IsGooglePlayGames)
チェック内にラップし、エラーロジックに直接移動してください。
12. パソコン向けの最適化
Google Play ゲームには、一般的な Android スマートフォンと比べていくつかの違いがあるため、それに応じてゲームを設定することをおすすめします。
テクスチャ圧縮の場合は DXT に切り替えます。ETC などの一般的な Android テクスチャ形式は、プレーヤーの GPU に直接渡すことができない場合、実行時にメモリ内でデコードされます。ASTC は卓越した互換性を備えていますが、ゲームで想定される動作を確認するにはデスクトップ GPU プロファイリング ツールを使用する必要があります。
現在はデスクトップ GPU を使用しているため、グラフィックの品質を向上させることをおすすめします。この設定は、[プロジェクトの設定] の [画質] で直接調整できます。
13. 完了
Google Play ゲームのゲームの作成を開始するための準備がすべて整いました。ゲームのテストとイテレーションを開始できます。同じコードベースを維持することもできますが、ゲームはネイティブの PC ゲームのように感じられるように調整する必要があります。
次のステップ
Google Play ゲームでゲームを販売するためには、次の作業が必要です。
- 最新情報については、クイックスタートをご覧ください。
- Play ゲームサービスのログイン v2 にアップグレードすると、リリース時にプレーヤーが自動的にログインされ、継続的な要件を満たすことができます。
- Play Integrity API を実装して、PC と同様のモバイル エクスペリエンスを確保します。
最後に、Google Play ゲームのサポートに関するこれまでの作業の多くが、ChromeOS へのリリースに役立つため、PC と同様にプラットフォームをサポートすることも検討してください。