Slide 1

Slide 1 text

CA.unity #9 2025/01/08 @yucchiy_ Unity6 の Android周辺の アップデートについて

Slide 2

Slide 2 text

• Unity 6におけるAndroid周辺の主要なアップデートを紹介します • Android Game Development Kit サポート • Addressables の Play Asset Delivery 対応 • Texture Compression Targeting 対応 • Android Project Configuration Manager • それぞれの概要や、対応の背景に触れつつ広く浅く説明します この発表で話したいこと

Slide 3

Slide 3 text

自己紹介 向井 祐一郎 • 株式会社 サイバーエージェント / 株式会社アプリボット • Lead Developer Experience • システム系の基盤開発・プロジェクトの開発支援 • プラットフォーム周り(iOS/Android)のサポート SNS・個人活動など • @yucchiy_(X) • Unity Weekly • https://blog.yucchiy.com/tags/unity-weekly/ • UniTips(社内有志で技術書典に執筆)

Slide 4

Slide 4 text

Unity6のアップデートの追い方

Slide 5

Slide 5 text

• Unity 6のアップデートは「New in Unity 6」にまとめられている Unity6における主要なアップデートの追い方 https://docs.unity3d.com/6000.0/Documentation/Manual/WhatsNewUnity6.html

Slide 6

Slide 6 text

• 「Unity Release Notes (Alpha)」でバージョン間の差分を見ることができる バージョン間のリリースノートの追い方 https://alpha.release-notes.ds.unity3d.com/

Slide 7

Slide 7 text

• UnityCsReferenceを解析してAPI一覧を抽出するというテもある APIの差分抽出 https://developers.cyberagent.co.jp/blog/archives/53378/

Slide 8

Slide 8 text

Unity6におけるAndroidの 主要なアップデート

Slide 9

Slide 9 text

• Android Game Development Kit(AGDK)の対応 • GameActivityへの移行や、周辺APIを利用できるように • AddressablesのPlay Asset Delivery(PAD)対応 • PADにおける配信設定をアセットのグループごとに設定できるように • Texture Compression Targetingのサポート • Google Playでデバイスごとに最適なテクスチャの圧縮形式 を配信できる • Android Project Configuration Managerの実装 • IPostGenerateGradleAndroidProject や テンプレート の代替機能 Unity6 におけるAndroidの主要なアップデート

Slide 10

Slide 10 text

Android Game Development Kit への対応

Slide 11

Slide 11 text

• ライブラリ • GameActivity • ゲーム用のコントローラやテキスト入力 • Memory Advice API • … • 最適化 • Android Performance Tuner • Android GPU Inspector • 適応性 • Game Mode & Game State API • Thermal API • CPU Performance Hint API • … • Android上でのゲーム開発と最適化を行うためのツールおよびライブラリ Android Game Development Kit とは https://developer.android.com/games/agdk/overview Unity6にて対応 Adaptive Performance 含めて対応

Slide 12

Slide 12 text

• Unity 6から、アクティビティがデフォルトでGameActivityに置き換わった • ライフサイクルや入力などのスレッドサポートが向上する • GameActivity導入で ANRが低下したユースケース が共有されている • GameActivity経由のイベントに対してのブリッジコードを独自に記述できる • どちらのアクティビティを利用するかは切り替え可能 • Player Settings > Other Settings > Configuration GameActivityについて https://developer.android.com/stories/games/cat-daddy-agdk https://discussions.unity.com/t/introducing-gameactivity-for-android-in-2023-1/911486

Slide 13

Slide 13 text

• ユーザー側から、ゲームに対してモードを設定するAPI • ゲーム側は、モードに応じた挙動を行うことを期待される Game Mode API https://developer.android.com/games/optimize/adpf/gamemode/gamemode-api

Slide 14

Slide 14 text

• ゲーム側からシステムに対して、現在のゲームの状態を伝えるAPI • システムが、デバイスのリソースや電力を最適化するのに用いる Game State API https://developer.android.com/games/optimize/adpf/gamemode/gamestate-api

Slide 15

Slide 15 text

• Unity6 で Game Mode API と Game State API がサポートされた Game Mode & State API の Unity サポート https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Android.AndroidGame.html

Slide 16

Slide 16 text

• 端末の状態を元に、最適なアプリ品質に適応するためのフレームワーク • スペック幅の広いAndroid端末上で、ゲームをちゃんと動かすための設計 • Thermal API や Game Mode API などの対応 も含まれる Adaptive Performance https://docs.unity3d.com/Packages/[email protected]/manual/index.html

Slide 17

Slide 17 text

Addressablesの Play Asset Delivery 対応

Slide 18

Slide 18 text

• Android App Bundleを介して Google Play上でアセットを配信する仕組み • 3つの配信モードに基づいてアセットを配信する • 適切に対応すると、200MBを超えるゲームを配信できる • ストアからダウンロードするサイズの上限は最大4GB Play Asset Delivery について https://developer.android.com/guide/playcore/asset-delivery

Slide 19

Slide 19 text

• install-time • アプリに埋め込まれるアセット • fast-follow • アプリインストール後に自動的にダウンロードされるアセット • on-demand • 利用する際にダウンロードされるアセット Play Asset Delivery の配信モード https://developer.android.com/guide/playcore/asset-delivery#6YWN5L-h44Oi44O844OI44KZ

Slide 20

Slide 20 text

• アセットにアクセスできない可能性がある • アプリ側で適切なエラーハンドリングが必要 fast-follow および on-demand の注意点 https://developer.android.com/guide/playcore/asset-delivery#44Ki44K744OD44OI44Gu5pu05paw

Slide 21

Slide 21 text

• 1GB以内に収まる範囲でinstall-timeにし、残りをfast-followに設定する • 柔軟にアセットパックを設定できない 既存のUnityでのPlay Asset Deliveryの対応 https://docs.unity3d.com/ja/2022.3/Manual/android-asset-packs-in-unity.html

Slide 22

Slide 22 text

• アセットグループごとに配信モードを選択できる • カスタムパックの作成にも対応 Addressables の Play Asset Delivery 対応 Asset Management > Addressables > Init Play Asset Delivery で設定を作成する アセットグループの 「Play Asset Delivery」項目の 「Delivery Type」を設定する アセットパックが適切に 作成できていることが確認できる

Slide 23

Slide 23 text

参考: Unity の Asset Pack を扱うAPI https://docs.unity3d.com/2022.3/Documentation/ScriptReference/Android.AndroidAssetPacks.html

Slide 24

Slide 24 text

Texture Compression Targeting 対 応

Slide 25

Slide 25 text

• デバイスがサポートしているテクスチャの圧縮形式の中から、 最適な圧縮形式のテクスチャを配信する仕組み • ASTCを優先し、フォールバックにETC2/1 • 選択された圧縮形式のみを配信する • アプリ・アセットサイズが削減できる • Android App Bundleの機能として提供 Texture Compression Targeting について https://developer.android.com/guide/playcore/asset-delivery/texture-compression https://android-developers.googleblog.com/2020/09/improve-your-game-with-texture.html

Slide 26

Slide 26 text

Texture Compression Targeting の Unity上での 設 定 https://docs.unity3d.com/6000.0/Documentation/Manual/android-distribution-google-play.html#texture-compression-targeting Build Profiles > Asset Import Overridesで、 圧縮設定を「No Override」に Player Settings > Other Settings > Texture Compression Formats でサポートする圧縮形式を設定 圧縮形式ごとに アセットパックが 生成されていることが 確認できる

Slide 27

Slide 27 text

Android Project Configuration Manager

Slide 28

Slide 28 text

• Gradle project を C#コード上で編集するためのAPI • 既存の Gradle Templateや IPostGenerateGradleAndroidProject の代替 Android Project Configuration Managerとは https://docs.unity3d.com/6000.0/Documentation/Manual/android-modify-gradle-project-files-agp.html using UnityEditor.Android; public class ModifyAndroidProjectScript : AndroidProjectFilesModifier { public override void OnModifyAndroidProjectFiles( AndroidProjectFiles projectFiles) { projectFiles.UnityLibraryBuildGradle. Android.DefaultConfig.MinSdkVersion.Set(28); } } 「AndroidProjectFilesModifier」を継承 Min SDK Versionを28に設定

Slide 29

Slide 29 text

• テンプレートのメンテナンスコストが高い • Unityが新しい機能を追加したときにテンプレートを更新した場合、 テンプレートを再生成する必要がある • プロジェクト側で自由にテンプレートを書き換えることができるため、 ライブラリ側でGradleの更新を行う際に考慮すべき点が多い Gradle Templateの課題

Slide 30

Slide 30 text

IPostGenerateGradleAndroidProjectの課題 • GradleやXMLを更新する際に、パーサーを独自で実装する必要がある using UnityEditor.Android; using UnityEngine; class MyCustomBuildProcessor : IPostGenerateGradleAndroidProject { public int callbackOrder { get { return 0; } } public void OnPostGenerateGradleAndroidProject(string path) { Debug.Log("OnPostGenerateGradleAndroidProject at path " + path); } } Androidプロジェクトの ルートパスが直接渡される ここでGradleやXMLを更新するための パーサーを書く必要がある

Slide 31

Slide 31 text

Android Project Configuration Manager の使 い道 • Gradleを書き換えたくなった場合には、まずは Android Project Configuration Manager の利用を検討する • 基本的には IPostGenerateGradleAndroidProject の高レベルAPI • サポートしない書き換えが発生したら、テンプレートの利用を検討する

Slide 32

Slide 32 text

まとめ

Slide 33

Slide 33 text

• Unity 6における Androidの主要なアップデートについて、 その背景や周辺知識をふまえて紹介しました • Android Game Development Kit • Addressables の Play Asset Delivery 対応 • Texture Compression Targeting 対応 • Android Project Configuration Manager まとめ