やらなイカ?

たぶん、iOS/Androidアプリの開発・テスト関係。

UWA GOTでUnityアプリのプロファイリング(Android編)

UWA*1 GOT*2は、Unityアプリのプロファイリングを行なう商用ツールです。 CEDEC 2019のセッション『あなたのモバイルゲーム開発の最適化時間を数ヶ月節約する方法』で紹介されました。

セッション後にUWAのブースやメール*3で問い合わせた内容も含め、簡単な使い方をまとめます。

jp.uwa4d.com

UWA GOTは、Unity 4.6以降で使用できます。ただし、後述のUWA GOT オンラインを利用する場合は、Unity 5.6以上が推奨とのこと。

プロファイリング対象プラットフォームは、CEDEC 2019時点のv2.0.0ではAndroid (Mono)とWindows (Mono)でしたが、最近リリースされたv2.0.1でiOS (IL2CPP)も対象となりました*4

プロファイリングは、以下の流れで行ないます。

  1. プラグインを組み込んでビルドしたアプリを端末にインストール
  2. アプリを実行・計測し、別の専用アプリでデータをプロファイラ(ローカルとオンラインの2種類から選択できます)に送信
  3. プロファイラで測定データを表示し、性能ボトルネックを調査

計測をアプリ単体で行なうことができるため、テスター・デバッガの手で実行することができます。反面、現状どうしても手作業が必要になるため、デバイスファーム等で大量の自動テストを実行しながらプロファイリングを行なうようなユースケースには向きません*5

UWA GOTの構成

構成要素がいくつかありますので、先に説明します。

GOT SDK

UWA GOT公式サイトからダウンロードできます。プラットフォームごとにunitypackageが分かれており、いずれかをインポートします。内容は以下。

  • GOT Editor: Unityエディタ拡張。2つの機能を持っています
    • 対象アプリへのGOTプラグインのインテグレーションサポート
    • ローカルサーバ機能
  • GOT プラグイン: 各プラットフォーム向けのプラグイン
  • ドキュメント: 少々古いものなので、ドキュメントは公式サイトからダウンロードできる日本語版を参照

GOT App

計測結果をプロファイラ(ビューア)にアップロードするためのアプリで、Android版とWindows版がzipに同梱されています。計測対象アプリとともに端末にインストールする必要があります。

iOSではプラグインにデータ送信機能が備わっているため、GOT Appは必要ありません。

GOT ローカルサーバ(ローカルテストツール)

Unityエディタ上で動作します。アプリで計測したプロファイリングデータを受信し、表示を行なうビューアです。

GOT オンライン

オンラインでプロファイリング表示を行なうサービスです。 ローカルサーバでのプロファイリング表示に比べ、表示できる項目が多く、また他のアプリの実測値をもとにしたサジェスト機能もあります。

料金体系

ローカルサーバは、使用するマシン1台ごとに¥11,500/年。15日間のトライアルが可能です。

オンラインは、計測データをアップロードできる時間(アプリの実行時間)に対する課金で、¥5,000/時間。 トライアルはありませんが、公式サイトでデモデータを閲覧できます*6

プラグインを組み込むアプリ数、アプリをインストールする端末数、計測回数および時間に制限はありません。

利用手順

まず、UWAのWebサイトで ログイン > 新規登録 から、新規ユーザ登録を行ないます。確認メールが届くまで数分かかります。 ログインできたら、ダウンロードページからSDKと日本語マニュアルをダウンロードできます。

以下、マニュアルを参照してください。以下、わかりにくいところだけ説明します。

SDKインテグレーション

  • ライセンスキーは購入*7後、Webサイト右上のアイコン > アカウント設定 > アカウントの残額 ページの「購入済ライセンス」に表示されます。メールで送られたりしませんのでご注意ください
  • アカウントの残額 ページでは、ライセンスと開発マシンの紐付けを解除して別のマシンに付け替えることも可能です。解除しようとすると「以下のライセンスとアカウントの紐付き関係を解除しますが、操作の取り消しできないため、継続しますか?」というメッセージが表示されますが、オンライン認証であれば特に制限なく解除・付け替え可能とのことです
  • UWA/Prefabs/UWA_AndroidもしくはUWA_IOSを最初に開くSceneのヒエラルキに追加するように書かれていますが、APIでも初期化が可能です。[RuntimeInitializeOnLoadMethod]アトリビュートを付けたメソッドからUWAEngine.StaticInit()を呼び出せば実現できます。APIについてはマニュアルの付録に記載があります
  • GOT Editor > "SDK インテグレーション" > "Build here"でビルドできますが、前提条件を満たしていれば普通にPlayerのビルドを行ってもUWA GOTが組み込まれたビルドとなります
  • ビルドに何らかの原因で失敗しても特にダイアログ等が出るわけではないので、コンソールを見る必要があります
  • UnityエディタのPlayモードではプロファイリングは実行できません
  • デフォルトのビルド出力先UWA_Builds/と、プロファイルデータ格納先TestData/をバージョン管理のトラッキングから外しておくのがいいでしょう
  • Androidでは、デバイスのファイルアクセスを許可する必要があります。v2.0.1ではアプリ起動時にダイアログが出ますが、v2.0.0では設定画面かadbコマンドで許可する必要があります

計測

UWA GOTをバンドルしたアプリを起動すると、下図のGUIがオーバーレイされます。

f:id:nowsprinting:20191025071100p:plain

"Overview", "Mono", "Assets"いずれかをタップすると計測がはじまります。ボタンによって採取できるプロファイルが異なります(後述)。

"Direct Mode"は、onにするとアプリが終了し、再起動するところから計測を開始できます。offのときは、"Overview", "Mono", "Assets"いずれかをタップしたタイミングで計測を開始します。

計測が開始されると"Stop"ボタンが表示されるので、一通り動作させたらこれをタップして計測を終了します。 一度計測を行ったら、アプリを再起動しなければ次の(他の)計測はできません*8

計測データのアップロード

計測データは端末に保存されますので、UWA GOT Appを起動してアップロードします。

f:id:nowsprinting:20191025071124p:plain:w400

"UWAローカルサーバ"は、Unityエディタ上でGOT Editorを開き、"WIFI"ボタンをクリックすると起動します(IPアドレスが表示されます)。 ローカルサーバを起動した状態でGOT AppにIPアドレスを入力(ポート番号は不要)し、"チェックする"をタップします。問題なければ左のマークが緑色になります。

"自分のデータ"の下に計測したデータが並びますので、アップロード先の"Online"もしくは"Local Server"をタップ、最後に"データ提出"をタップするとアップロードできます。

なお、ローカルサーバに上げたデータをGOT Editorからオンラインにアップロードすることもできます。

計測データの表示

GOT Editorの"Overview", "Mono", "Assets"いずれかをクリックするとウィンドウが開くので、右上の"バージョン"でアップロードした計測データを選択します。

f:id:nowsprinting:20191025071430p:plain:w400

f:id:nowsprinting:20191025073622p:plain:w400

"Overview"では、"ファンクション"でCPU, FPS, MonoHeap, Hardware, markerを切り替えて表示できます。

それぞれの数値のグラフ表示、選択した場所(上図の赤い縦線のところ)のスクリーンショット*9、また、メソッド単位でヒープ使用量やオブジェクトカウントの表示*10などが便利な点です。

また、オンライン版では、DrawCall*11Canvas Batching*12なども表示できます。

*1:ゆーわ: 会社名

*2:ごーと: Game Optimization Toolkitの略

*3:UWA Technologiesは中国の会社ですが、日本に代理店があるので日本語で質問できます

*4:AndroidWindowsは引き続きMonoのみですが、近日中にIL2CPP対応されるとのこと

*5:大量のプロファイリングを行ないたい場合は、同じくCEDEC 2019のセッション『Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム』の方式が向いていそうです

*6:プロジェクト > Overview等 > デモプロジェクトを選択。オペレーション列の[確認]クリックで詳細を見ることができます

*7:PayPalで購入できます

*8:改善要望はしており、修正予定はあるそうです

*9:30fpsで撮られていますが、アプリ実行に遅延を感じること無く高速に撮影されているようです

*10:数値は10フレームごとの最大値を出しているそうです

*11:Overview > レンダリングモジュール

*12:Overview > UIモジュール