Slide 1

Slide 1 text

UnityによるPCアプリの新しい選択肢。 「PC版 Google Play Games」への対応 について グリーエンターテインメント社 シニアエンジニア 中 貴弘

Slide 2

Slide 2 text

中 貴弘 アーケードゲーム、コンシューマゲーム会 社、モバイルアプリ開発会社を経て、2012年 2月グリー株式会社に入社。 プラットフォームミドルウェア、株式会社 WFS、海外ゲーム事業などでの経験を経て、 2017年4月よりグリーエンターテインメント 株式会社にてゲーム開発および技術サポート 業務を担当。 グリーエンターテインメント社 シニアエンジニア 2

Slide 3

Slide 3 text

目次・アジェンダ ● はじめに ○ なぜPC版を作るのだろう? ○ PC版 Google Play Gamesとは? ● PC版 Google Play Games対応 ○ x86-64 apkの実行環境を準備 ○ x86-64 ABI対応について ○ PCディスプレイ対応 ○ 権限ダイアログの無効化 ○ WebView対応 ○ その他 ● まとめ ● 所感 3

Slide 4

Slide 4 text

はじめに 4

Slide 5

Slide 5 text

「このゲームのPC版を作って」と言われる ● 開発がβフェーズ ● タイトルが運営中 そんなにタイミングでこの話が天から降ってくることがあります 今回は実際にPC版を作成して、リリースするまでにぶつかった問題について お話します 5

Slide 6

Slide 6 text

なぜPC版を作るのだろう? 6

Slide 7

Slide 7 text

ゲーム開発はクロスプラットフォーム配信が主流 ひとつのコードベースからiOS,Android向けに加えて、PCやコンシューマー機 にも向けて配信するタイトルが年々増えている 7

Slide 8

Slide 8 text

クロスプラットフォーム配信のメリット 開発コストの削減: ゲームエンジンの登場で一つのコードベースで複数のプ ラットフォームに対応できるため、開発コストを大幅に削減することができる 開発期間の短縮: 開発コストと同じ理由で、開発期間を短縮し、迅速に市場に 投入することができる メンテナンス性の向上: 一つのコードベースで管理するため、バグ修正や機能 追加といったメンテナンス作業が効率化される 人材不足の緩和: 特定のプラットフォームに特化したエンジニアを採用する必 要がなく、人材の確保が容易になる 8

Slide 9

Slide 9 text

PC版対応の選択肢 PCゲームの配信プラットフォームはいくつかありますが、Unityで開発したアプリにおいて 主要なプラットフォームは下記になります ● Steam ○ 世界シェアNo.1: 世界中で最も利用されているPCゲームプラットフォームであり、日本で も圧倒的な人気を誇ります。 ○ 豊富なタイトル: インディーゲームから大作まで、幅広いジャンルのゲームが揃っており、 日本語に対応しているタイトルも多数あります。 ● DMM ○ 国内最大級のPCゲームプラットフォーム: 数多くのオリジナルタイトルや海外ゲームの ローカライズ版を配信しています。 ○ 日本向けのコンテンツ: 日本人向けのゲームやイベントが多く、日本のゲーム文化に根ざし たサービスを提供しています。 9

Slide 10

Slide 10 text

スマホアプリのPC版対応の問題点 ● 配信プラットフォーム専用のアカウント認証や課金モジュールを差し替え る必要がある ● あらたにビルド環境を整備する必要がある ● その他、ゲームのPC解像度対応など 10

Slide 11

Slide 11 text

スマホアプリのPC版対応の問題点 ● 配信プラットフォーム専用のアカウント認証や課金モジュールを差し替え る必要がある ● あらたにビルド環境を構築する必要がある ● その他、ゲームのPC解像度対応など 11 新しい選択肢として、PC版 Google Play Gamesをオススメします

Slide 12

Slide 12 text

PC版 Google Play Gamesとは? 12

Slide 13

Slide 13 text

PC版 Google Play Gamesとは Androidスマートフォンで遊んでいたゲームを、Windowsパソコンでプレイで きるサービスです。 主な特徴: ● スマホゲームをパソコンのディスプレイの大画面、高解像度、高フレッ シュレートで迫力のあるグラフィックで楽しめます ● スマホのタッチ操作だけでなく、マウスやキーボードを使った直感的な操 作も可能です ● クラウドセーブに対応しており、スマホとパソコン間でゲームデータが同 期されるので、いつでもどこでも同じゲームを楽しめます ● スマホで貯めたGoogle Playポイントをパソコンでも利用できます 13

Slide 14

Slide 14 text

ユーザー視点のメリット ● 大画面で快適: スマホの小さな画面では見えにくかった部分も、大画面で 見やすくプレイできます ● 操作性の向上: マウスやキーボードを使った操作は、細かい操作が必要な ゲームでも快適にプレイできます ● マルチデバイス対応: スマホとパソコンで同じゲームデータを利用できる ため、場所を選ばずにゲームを楽しめます 14

Slide 15

Slide 15 text

ユーザー視点のデメリット ● 対応ゲームが限られている: すべてのAndroidゲームに対応しているわけ ではありません ● ベータ版: 現在、ベータ版のため、今後機能が変更される可能性がありま す 15

Slide 16

Slide 16 text

● 対応ゲームが限られている: すべてのAndroidゲームに対応しているわけ ではありません。 ● ベータ版: 現在、ベータ版のため、今後機能が変更される可能性がありま す。 16 執筆の時点(2024/10/25)では、Google Play Gamesへ申し込み をして、ゲームの審査を受ける必要があります ユーザー視点のデメリット

Slide 17

Slide 17 text

17 メリット >>> デメリット で販路の拡大が期待できる ユーザー視点では では、開発者視点ではどうなの?

Slide 18

Slide 18 text

さっき言いましたが、スマホアプリのPC版対応の問題点 ● 配信プラットフォーム専用のアカウント認証や課金モジュールを差し替え る必要がある ● あらたにビルド環境を構築する必要がある ● その他、ゲームのPC解像度対応など 18 Google Play Gamesを利用していれ ば、新たな対応はほぼ不要

Slide 19

Slide 19 text

さっき言いましたが、スマホアプリのPC版対応の問題点 ● 配信プラットフォーム専用のアカウント認証や課金モジュールを差し替え る必要がある ● あらたにビルド環境を構築する必要がある ● その他、ゲームのPC解像度対応など 19 Google Play Gamesを利用していれ ば、新たな対応はほぼ不要

Slide 20

Slide 20 text

今回はPC版 Google Play Games対応時に 生じた問題への技術的なアプローチについ てお話します 20

Slide 21

Slide 21 text

PC版 Google Play Games対応について 21

Slide 22

Slide 22 text

PC版 Google Play Gamesの審査について ● 互換性のあるビルドの要件 ○ ARMまたはx86-64ビルドに対応している ○ PC版で利用できない機能(Androidのカメラなどや一部のGoogle API)の無効化 ○ 埋め込みWebViewの変更 ● 最適化されたビルドの要件 ○ x86-64 ABI対応 ○ 入力対応(キーボードやInput SDKの対応など) ○ PCディスプレイ対応 ○ Google Play Games サービスへのログインと PC 版ゲームの同期 ■ ここはAndroid版との対応と同じなので割愛 22

Slide 23

Slide 23 text

x86-64 apkの実行環境を準備 23

Slide 24

Slide 24 text

PC 版 Google Play Games デベロッ パー エミュレータのセットアップ ● Windowsのみ対応 ● ダウンロード ○ https://developer.android.com/games /playgames/emulator?hl=ja ● 仮想化 ○ Hyper-V を有効にする ● その他 ○ セキュリティツールが原因で起動しない こともある。設定を要確認 24

Slide 25

Slide 25 text

adb(Android Debug Bridge)のセッ トアップ ● Android Studioにバンドルされてい るものを推奨 ● 通常のAndroid開発と同様にエミュ レータを検知、apkのインストー ル、logcatが可能 ● 接続はlocalhost:6520で固定 25

Slide 26

Slide 26 text

x86-64 ABI対応について 26

Slide 27

Slide 27 text

x86-64 ABI対応前の確認 ● Unityのバージョン確認 ○ Unity 2019.4.31f1、 2020.3.19f以降のバージョンで 動作できるようにする ○ Unity2018以前はx86ビルドはで きるが、x86-64ではビルドでき ない ● IL2CPPで動作できるようにする ○ Target Architecturesでx86-64が 選択できるようになる 27

Slide 28

Slide 28 text

x86-64 ビルド後の確認 ● apkのlibを確認 ○ Android StudioのAnalyze APKを使う と簡単にapk内部を確認できる ○ Androidで実行可能なarm64版とPC版 (x86_64)版のlibの内容を比較しながら確 認。内容物が同じであれば基本的に問題 なし ○ サードパーティのネイティブプラグイン を導入している場合(サウンドなど) x86_64版がない場合があるので、プラ グイン開発元に問い合わせる必要がある 28 ※Analyze APKの結果 ピンクがx86_64版、グリーンがarm64版

Slide 29

Slide 29 text

PCディスプレイ対応 29

Slide 30

Slide 30 text

グラフィックス要件 ● Graphics APIの選択 ○ OpenGLES3.1以下、またはVulkan1.1以下の選択する ● 解像度 / アスペクト比 ○ 4K解像度(3840 × 2160)まで対応 ○ 横持ち16:9 縦持ち9:16 ただし、回転する場合は16:9で縦持ち状態のとき左右にレター ボックスができる ○ 理想的なユーザーエクスペリエンスの実現のために、21:9、16:10、3:2 などもサポート する必要もある ○ ゲーム起動後に動的に画面のアスペクト比を変更することはできない 30

Slide 31

Slide 31 text

グラフィックス要件 ● Graphics APIの選択 ○ OpenGLES3.1以下、またはVulkan1.1以下の選択する ● 解像度 / アスペクト比 ○ 4K解像度(3840 × 2160)まで対応 ○ 横持ち16:9 縦持ち9:16 ただし、回転する場合は16:9で縦持ち状態のとき左右にレター ボックスができる ○ 理想的なユーザーエクスペリエンスの実現のために、21:9、16:10、3:2 などもサポート する必要もある ○ ゲーム起動後に動的に画面のアスペクト比を変更することはできない 31 まずは1920:1080(フルHD)で画面サイズを決め打ちして、対応 の目安とすることをおすすめします

Slide 32

Slide 32 text

ご存知の通り、 ゲームの解像度やアスペクト比の対応は とても大変です ※しかもゲームによって対応が異なる 32

Slide 33

Slide 33 text

今回はAndroid縦持ちでの持ち味をPC版でも活かすケースを前提に 対応を考えてみます ● 仕様 ○ Androidでは機種によって解像 度やアスペクト比は変わるが、 今回はゲーム画面を9:16縦長に する(1080:1960) ○ ゲーム画面とエミュレータウィ ンドウの差分にできる余白部分 を対処する 33 ※イメージです

Slide 34

Slide 34 text

ゲームシーンをレンダリングするカメラのViewport Rectを縦長に変更し てみた ※scriptでViewport Rectを算出して変更するのがベター 34

Slide 35

Slide 35 text

Viewport Rectを算出するScript 35 参考:Unity入門の森(https://feynman.co.jp/unityforest/game-create-lesson/clicker-game/mobile-adjustment/) ExecuteAlwaysアトリビュートでEdit モードでも動作させるのが便利です

Slide 36

Slide 36 text

UIはRenderModeをScreen Space - Overlayに設定すると、ゲーム画面外 のスクリーンに表示されてしまうので、Screen Space - Cameraにして ゲーム画面内での相対位置で設計する ※UI Scale ModeはConstant Pixel Sizeが推奨されている 36 Screen Space - Overlay Screen Space - Camera

Slide 37

Slide 37 text

縦持ち画面にしたときにウィンドウにできる余白の対応 1. ウィンドウのアスペクト比を縦長にして、ゲーム画面とウィンドウのサイズを一致させ て余白をなくす 2. ウィンドウのアスペクト比を横長にして、できた余白部分を別のレンダリングで埋める 37

Slide 38

Slide 38 text

余白対応その1 エミュレーターのアスペクト比を9:16に変更する 38

Slide 39

Slide 39 text

エミュレーターのアスペクト比を 変えるアプローチ 39 ● Screen.SetResolutionメソッド で解像度を変更することも可能 ● アスペクト比が同じなら同一の ウィンドウサイズで内部の解像 度のみが変更される ● UIは推奨であるUI Scale Mode がContent Pixel Sizeだと解像 度に応じてレイアウトが変わる ので、検討する Windowsのトレイ内のアイコンを右ク リックするとエミュレータのオプション が表示される

Slide 40

Slide 40 text

余白対応その2 ゲーム画面用カメラとは別に背景用カメラをシーンに追加して、ウィンド ウいっぱいに背景をレンダリングしたあと、ゲーム画面を重ねてレンダリ ングすることで、余白部分を埋める(レターボックス処理) 40

Slide 41

Slide 41 text

余白部分をなくすアプローチ 41 1. 背景用カメラ(ScreenCamera) をシーンに追加 2. Render Type:Base 3. Rendering / Priorityをゲーム カメラより小さくする(マイナ ス値でも可) 4. Rendering / Culling Maskを背 景専用のレイヤーにする(この 例ではScreen)※α 5. 背景に描画したいものはLayer をScreenにする※β ※α レイヤーにScreenを新規追加 ※β レイヤーをScreenにする

Slide 42

Slide 42 text

今回作成したサンプル背景 42 ● Projection:Orthographic ○ 画面いっぱいにエフェクトを表示 しやすい ● Environment / Background Type:Solid Color ● 桜吹雪はVFX Editorで作成 ● ゲーム画面でパーティクルエフェクト の半分ほどが塗りつぶされてしまうの で、フィルレート的にはもったいない ● ScreenCameraからはAudio Listener コンポーネントを削除する

Slide 43

Slide 43 text

画面を縦持ち<->横持ちに回転させるゲームの対応 ● 仕様 ○ Androidでは端末を横向きに持 ち替えて表示するが、PC版では 全画面表示に切り替える ○ 縦持ち時のレターボックス処理 は停止 ○ Androidでのorientation変更処 理は無効化する 43 ※イメージです

Slide 44

Slide 44 text

横持ち画面に切り替えたケースの対応 44 ● 全画面表示する ○ ゲームカメラのViewport.rectを (0,0,1,1)のdefault状態にする ○ 基本的にはこれで問題ない ● ゲーム画面にポストエフェクトをかける ために、UIのカメラを別に作ってゲーム カメラのカメラスタックに配置している 場合 ○ ゲームカメラと同様に Viewport.rectを変更する必要があ る

Slide 45

Slide 45 text

Viewport Rectまわりを改修 45 縦向き<->横向きを切り替える ChangeViewportメソッドや画面の向きの状態 を保持するorientation変数を追加 向きによってViewport rectのパラメータを変 更する

Slide 46

Slide 46 text

Viewport Rectまわりを改修 46 ※カメラスタックを使っているので、URPを前提にしてます オーバーレイするカメラの一覧取得とViewPort Rectの再計算

Slide 47

Slide 47 text

権限ダイアログの無効化 47

Slide 48

Slide 48 text

Androidの権限ダイアログを無効にする ● マイクの権限を除いて、PC版 Google Play Gamesでは権限ダイアログが 表示されない ● 実行時に権限ダイアログのリクエストなどは行わないようにする ● このあたりのリクエストは、UnityEditor上では呼び出さないよう、 #if !UNITY_EDITOR && UNITY_ANDROID で定義されていることが多いので、PC版でも同様に呼び出さないように するとよい 48

Slide 49

Slide 49 text

WebView対応 49

Slide 50

Slide 50 text

埋め込みウェブビューを削除する ● 利用規約やプライバシーポリシーの表示などで使われる埋め込みウェブ ビューを削除して、代わりにApplication.OpenURLメソッドを呼ぶのを 推奨されている ● 移植を容易にするためにWebViewはサポートされてますが、エミュレータ 内で呼ばれるので、UX的にはオススメしない ● このあたりはUnity Editorでも同様の処理をしてることが多いので、 Editorでの導線確認などを行っておく 50

Slide 51

Slide 51 text

その他 51

Slide 52

Slide 52 text

デバッグについて ● PC版 Google Play Games Developer EmulatorはUnity Editorと接続す ることができないため、LogやFrameDebuggerなどの各種Analysisツール を用いたデバッグができない ● Android Studioは接続できるので、Logcat等での情報取得は可能 ● 上記制約により概ねの機能チェックはAndroid実機で担保することになる が、グラフィックス周りで挙動の違いが出ることも時々ある ● Google Play ConsoleのApp Bundle エクスプローラーにaab形式でアップ ロード後、署名済みユニバーサルapkをダウンロードすることで各種サー ビスの検証が可能になる 52

Slide 53

Slide 53 text

ビルドについて ● Target Architecturesに複数のチェックが入っているとabiごとにコンパ イルが実施されるために時間がかかる 開発時はTargetを絞ってビルドするほうがよい ● 上記の理由もあってAndroid用とPC用のビルドを分けるほうがイテレー ション効率がよい ● Google Play Consoleでは複数のバイナリを同一バージョンとしてリリー スできるのでAndroid版、PC版のaabをそれぞれビルドしても問題ない 53

Slide 54

Slide 54 text

まとめ 54

Slide 55

Slide 55 text

まとめ ● PC版 Google Play GamesではAndroidと同じアカウント認証/課金モ ジュールを使うことができるため、他のPC版よりも少ない工数でPC版リ リースを作成することができる ● x86-64 ビルドのためにネイティブプラグインの対応状況は要確認 ● PC版 Google Play Gamesのウィンドウアスペクト比は初期状態で固定の ため、縦持ち<->横持ちとアスペクト比が変更する演出がある場合は横長 のアスペクト比を選択して、それぞれ対応する ● PC版 Google Play Gamesでは権限ダイアログが表示されないので呼び出 さないようにする ● WebviewまわりはApplication.OpenURLに置き換える ● デバッグやビルドについて、通常のAndroidと異なる工夫が必要 55

Slide 56

Slide 56 text

所感 ● 現在もβ版のため、リリース要件が変わったりすることもありうる ● アセット周りなどAndroidと共通部分が多く、エミュレータで起動させる だけならかなり早く対応できた ● 一方で制約も多少あるので、エミュレータ上で不具合が起きたときの調査 が難航した ● 開発情報が少なく、落とし穴にハマったときに原因究明に時間がかかった ● 今後、参加タイトルが増えて情報交換が活発になるのを望む 56

Slide 57

Slide 57 text

ご清聴ありがとうございました 57

Slide 58

Slide 58 text

No content