iOS-specific optimizations
ビルドした iOS プレイヤーのサイズ最適化

Measuring performance with the built-in profiler

Unity iOS and Android contain a built-in profiler. The built-in profiler emits console messages from the game running on device. These messages are written every 30 seconds and will provide insight into how the game is running. Understanding what these messages mean is not always easy, but as a minimum, you should quickly be able to determine if your game is CPU or GPU bound, and if CPU bound whether it’s script code, or perhaps Mono garbage collection that is slowing you down. See later in this page to learn how to configure the built-in profiler.

What the profiler tells you

ビルトインプロファイラーの出力例は次のとおりです。.

iPhone/iPad Unity internal profiler stats:
cpu-player> min: 9.8 max: 24.0 avg: 16.3
cpu-ogles-drv> min: 1.8 max: 8.2 avg: 4.3
cpu-waits-gpu> min: 0.8 max: 1.2 avg: 0.9
cpu-present> min: 1.2 max: 3.9 avg: 1.6
frametime> min: 31.9 max: 37.8 avg: 34.1
draw-call #> min: 4 max: 9 avg: 6 | batched: 10
tris #> min: 3590 max: 4561 avg: 3871 | batched: 3572
verts #> min: 1940 max: 2487 avg: 2104 | batched: 1900
player-detail> physx: 1.2 animation: 1.2 culling: 0.5 skinning: 0.0 batching: 0.2 render: 12.0 fixed-update-count: 1 .. 2
mono-scripts> update: 0.5 fixedUpdate: 0.0 coroutines: 0.0 
mono-memory> used heap: 233472 allocated heap: 548864 max number of collections: 1 collection total duration: 5.7

すべての時間はミリ秒毎フレームで測定されます。直近 30 フレームの最小、最大、平均時間が見られます。

General CPU activity

Property: Function:
cpu-player ゲームが Unity エンジンの中でコード実行やスクリプト実行が CPU 上で消費する時間を表示
cpu-ogles-drv OpenGL ES ドライバのコード実行が CPU 上で消費する時間を表示。ドローコール、内部レンダリングのステート変更、レンダリングパイプラインセットアップおよび処理する頂点数がドライバの統計に影響します
cpu-waits-gpu GPU によるレンダリング完了を待機している CPU のアイドル時間。もしこの数が 2–3 ミリ秒を超える場合、アプリケーションはフィルレートまたは GPU 処理能力がボトルネックの可能性が高いです。もし値が小さすぎる場合、プロファイルは値の表示をスキップします
msaa-resolve The time taken to apply anti-aliasing.
cpu-present OpenGL ES の presentRenderbuffer コマンド実行に要した時間
frametime ゲームフレームの総時間を表します。iOS ハードウェアは常に 60Hz のリフレッシュレートにロックされているため、~16.7ms の倍数の時間が得られます。(1000ms/60Hz = 16.7ms)

Rendering statistics

Property: Function:
tris # レンダリングに送信される三角形の総数
verts # レンダリングに送信される頂点の総数。静的な物体では 10000 以内に抑えればよいですが、たくさんのスキニングされた物体がある場合はもっと低く抑えるべきです。
batched エンジンによりバッチされたドローコール、三角形、および頂点の数。この数をドローコールと三角形の総数と比較することでシーンがバッチするのに適しているか判断する材料となります。バッチを改善するためにはできる限りマテリアルを共有するべきです。

Detailed Unity Player statistics

The player-detail section provides a detailed breakdown of what is happening inside the engine:

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

Detailed script statistics

mono-scripts セクションにより、Mono ランタイムのコード実行に要した時間について詳細な内訳が表示されます。

Property: Function:
update スクリプトのすべての Update() 実行に要した総時間
fixedUpdate スクリプトのすべての FixedUpdate() 実行に要した総時間
coroutines スクリプトのコルーチン内で要した時間

Detailed statistics on memory allocated by scripts

mono-memory セクションにより、Mono ガベージコレクターによりメモリ管理がどのように管理されているかの情報がみられます。

Property: Function:
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

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

To enable it on Android, click the Enable Internal Profiler (Deprecated) checkbox in PlayerSettings (Edit > Project Settings > Player). Make sure Development Build is checked in the Build Settings when building, and the statistics should show up in logcat when run on the device. To view logcat, you need adb or the Android Debug Bridge. Once you have that, simply run the shell command adb logcat.

iOS-specific optimizations
ビルドした iOS プレイヤーのサイズ最適化