Version: 2020.1
言語: 日本語
iOS 固有の最適化
ビルドした iOS プレイヤーのサイズ最適化

ビルトインプロファイラーによるパフォーマンスの測定

ノート: 内部プロファイラーは非推奨で、Unity の将来のバージョンで廃止される予定です。代わりに Profiler ウィンドウ を使用してください (Window > Analysis > Profiler)。

Unity には iOS と Android 用のビルトインプロファイラーが含まれています。ビルトインプロファイラーは 30 フレームごとに、デバイス上で実行されているアプリケーションからコンソールメッセージを出力します。これらのメッセージは、アプリケーションの実行状況を詳しく通知します。特に、アプリケーションが CPU バウンドか GPU バウンドかを判断するのに役立ちます。アプリケーションが CPU バウンドの場合は、スクリプトコードとガベージコレクションのどちらがボトルネックの原因かを判断することもできます。このページではビルトインプロファイラーの設定方法を説明します。

以下は、ビルトインプロファイラーの出力例です。

iPhone Unity internal profiler stats
frametime>     min: 32.5   max: 34.1   avg: 33.3
cpu-player>    min:  2.2   max:  4.4   avg:  3.7
batches>       min:   3    max:   3    avg:   3
draw calls>    min:   3    max:   3    avg:   3
tris>          min:  1704  max:  1704  avg:  1704
verts>         min:  5088  max:  5088  avg:  5088
dynamic batching> batched draw calls:   0 batches:   0 tris:     0 verts:     0
static batching>  batched draw calls:   0 batches:   0 tris:     0 verts:     0
player-detail> physx:  0.0 animation:  0.0 culling  0.0 skinning:  0.0 batching:  0.0 render:  0.0 fixed-update-count: 0 .. 0
scripting-scripts>  update:  0.0   fixedUpdate:  0.0 coroutines:  0.0 
scripting-memory>   information not available on non-development player configuration

すべての時間はミリ秒/フレームで測定されます。直近 30 フレームの最短時間、最長時間、平均時間を確認できます。

一般的な CPU アクティビティ

プロパティ 機能
cpu-player アプリケーションが Unity エンジンの中でコードを実行したり、CPU でスクリプトを実行する時間を表示します。
cpu-ogles-drv (Android only) CPU 上での OpenGL ES ドライバーコードの実行に要する時間を表示します。ドローコール、内部レンダリングのステート変更、レンダリングパイプラインの設定、処理された頂点数などのいくつかの要因が、ドライバーの統計に影響します。
cpu-present (Android only) OpenGL ES の presentRenderbuffer コマンド実行に要した時間。
frametime アプリケーションフレームの総時間を表します。iOS ハードウェアは常に 60Hz のリフレッシュレートにロックされているため、常に 16.7ms (1000ms/60Hz = 16.7ms) の倍数の時間を返します。

レンダリング統計 

プロパティ 機能
tris # レンダリングに送信される三角形の総数を表示します。
verts # レンダリングに送信される頂点の総数。アプリケーションが静的ジオメトリのみを使用する場合は、この数値を 10000 未満に保つ必要があります。アプリケーションでスキンジオメトリのインスタンスを多数使用する場合、この数ははるかに少なくなります。
dynamic/static batching エンジンによりバッチされたドローコール、三角形、および頂点の数。この数をドローコールと三角形の総数と比較することでシーンがバッチするのに適しているか判断する材料となります。バッチを改善するには、オブジェクト内でできる限りマテリアルを共有するべきです。

詳しい Unity プレイヤー統計情報

player-detail セクションには、エンジン内部の状況の詳細な内訳が表示されます。

プロパティ 機能
physx 物理エンジンの計算に要した時間を表示します。
animation ボーンアニメーションに要した時間を表示します。
culling カメラの Frustum 外のオブジェクトカリングに要した時間を表示します。
skinning スキンメッシュへのアニメーション適用に要した時間を表示します。
batching ジオメトリのバッチに要した時間。動的なジオメトリのバッチは静的なジオメトリのバッチより、リソースの負担が顕著に高くなります。
render 表示されるオブジェクトのレンダリングに要した時間を表示します。
fixed-update-count このフレームで実行された最小と最大の FixedUpdate の数を表示します。FixedUpdate の数が大きすぎるとパフォーマンスが著しく劣化します。fixed time delta についてよい値を設定するためにいくつかシンプルなガイドラインが ここに あります。

詳しいスクリプト統計

scripting-scripts セクションは、 Mono ランタイムで コードを実行するのに要した時間の詳細な内訳を提供します。

プロパティ 機能
update スクリプトのすべての Update() メソッド実行に要した総時間を表示します。
fixedUpdate スクリプトのすべての FixedUpdate() メソッド実行に要した総時間を表示します。
coroutines スクリプトのコルーチン内で要した時間を表示します。

スクリプトによって割り当てられたメモリに関する詳細な統計

scripting-memory セクションは、Mono ガベージコレクターによるメモリの管理状況に関する情報を提供します。

プロパティ 機能
allocated heap 割り当て可能なメモリの総量。ヒープに任意の割り当てに十分なメモリがない場合、ガベージコレクションがトリガーされます。これで十分なメモリが解放されない場合、割り当てられたヒープのサイズが増加します。
used heap 現在、オブジェクトが使用している allocated heap の量。新しいクラスインスタンス (構造体ではない) を作成するたびに、この数は次のガベージコレクションまで増え続けます。
max number of collections 直近 30 フレームでのガベージコレクションが行われた回数を表示します。
collection total duration 直近 30 フレームでのガベージコレクションの総時間 (ミリ秒単位) を表示します。

設定

iOS ではデフォルトでは、内部プロファイラーがデフォルトで無効となっています。それを有効にするためには Unity により生成された XCode プロジェクトを開いて、InternalProfiler.h ファイルを選択し、以下のように変更します。

# define ENABLE_INTERNAL_PROFILER 0

の行を以下のように変更します。

# define ENABLE_INTERNAL_PROFILER 1

または、iOS Player Settings (Edit > Project Settings > Player Settings, then select iOS) にアクセスします。Debugging and crash reports セクションで、Enable Internal Profiler (Deprecated) 設定を有効にします。アプリケーションをビルドするときに、Build SettingsDevelopment Build が有効になっていることを確認します。

出力コンソール (GDB) を表示するには、XCode のメインメニューで View > Debug Area > Activate Console を選択して、次にプロジェクトを実行します。Unity は統計情報を 30 フレームごとにコンソールウィンドウに表示します。

Android で内部プロファイラーを有効にするには、Android の Player Settings (Edit > Project Settings > Player Settings に移動し Android を選択) にアクセスします。Optimization セクションで、Enable Internal Profiler (Deprecated) 設定を有効にします。デバイスでアプリケーションを実行する場合は、統計は logcat に送信されます。logcat を表示するには、** adb** または Android Debug Bridge がインストールされていることを確認してから、シェルコマンド adblogcat を実行します。

iOS 固有の最適化
ビルドした iOS プレイヤーのサイズ最適化