パフォーマンス
YAUI は何もしなくても高速です。このページでは、何に時間がかかるか、そしてそれを抑える方法を説明します。uGUI や UI Toolkit との比較はベンチマークを参照してください。
ドローコール
パネルは 1 回のドローコールで描画されます。ただし、次の箇所では分割されます。
- 描画順で要素の間でマテリアルが変わる箇所 (カスタムマテリアル)
- マスクが始まる・終わる箇所 (
YauiMask) - 連続する要素が 8 枚を超えるテクスチャを使う箇所。フォントアトラス、スプライトのテクスチャ、動的アトラスのページ、Raw Image のテクスチャはすべて数に含まれます。
ドローコールを抑えるには:
- カスタムマテリアルではなく、Uber シェーダー (ボックスのスタイル、テキストの効果、画像の種類) を使ってください。
- 矩形または 1 つの角丸矩形で十分な場合は、
YauiMaskではなくClipChildrenを使ってください。 - 小さなスプライトは動的アトラスに入れ、一緒に表示する大きなスプライトは同じスプライトアトラスに入れてください。
- 1 つのパネルで使うフォントの数を少なくしてください。
CPU
| 処理 | ヒント |
|---|---|
| テキスト生成は最もコストの高い処理です。 | テキストは変わったときだけ設定してください。同じフレームで変わるテキストの数を少なくしてください。 |
| レイアウトは変更を含む境界について実行されます。 | 内容によってサイズが変わらないコンテナに固定の Width と Height を与え、レイアウトの境界にしてください。アニメーションにはレイアウトのプロパティではなく描画変換を使ってください。 |
| 階層の変更はパネルの描画順を作り直します。 | 毎フレーム作成・破棄するのではなく、要素を再利用してください。GameObject の有効化・無効化も階層の変更です。 |
YauiPanel.ForceUpdate() はすべての処理をメインスレッドで一度に完了させます。 | 同じフレームで結果が必要なときだけ呼んでください。 |
色、描画変換、不透明度の変更はほぼ無料で、変更のないフレームのコストはほぼゼロです。
GPU
Uber シェーダーには多機能であることによるコストがあり、YAUI の GPU 時間は uGUI の約 1.7〜2.3 倍、UI Toolkit と同程度かそれ以下です (ベンチマークを参照)。これを抑えるには:
- どの UI でも同じですが、大きな半透明の領域の重なり (オーバードロー) を避けてください。
- 影のぼかしが大きいと、描画される Quad が大きくなります。
- カスタムシェーダーの
YAUI_PIXEL_CLIPはモバイルで GPU 時間がかかります。必要なときだけ有効にしてください。
スクロールビュー
YauiScrollView は描画変換で内容を動かすため、スクロールでレイアウトが実行されることはありません。項目の仮想化は行いません。すべての項目が描画・レイアウトされます。非常に長いリストでは、上位のレイヤーで少数の項目を再利用してください。