Version: 2023.2
言語: 日本語
ランタイム UI イベントシステム
UI Toolkit を使用した入力およびイベントシステムに関する FAQ

ランタイム UI のパフォーマンスに関する考慮点

このページでは、ランタイム UI のパフォーマンスを向上させる方法について説明します。

Use usage hints to reduce draw calls and geometry regeneration

You can use usage hints to set how an element is used at runtime. Usage hints can reduce draw calls and avoid geometry regeneration.

You can set the usage hints in UI Builder, UXML, or C#. The following examples set the usage hints to DynamicTransform:

UXML:

<ui:VisualElement usage-hints="DynamicTransform" />

C#:

visualElement.usageHints = UsageHints.DynamicTransform;

The supported usage hints are:

For more information, see usageHints and VisualElement.usageHints.

デバイスの能力を考慮する

Some Android devices and the Web platform can’t partially patch index buffers. If your audience uses such devices or if you target the Web platform, UI Toolkit rendering is still functional but performance may be degraded. To avoid performance degradation, don’t animate too many elements at the same time and profile on device.

メッシュのテセレーションを避ける

ビジュアル要素のメッシュテッセレーションを作成するには、計算コストがかかります。要素のサイズ (幅/高さ) が変わるたびに、そのジオメトリは再作成されます。これは、アニメーションや頻繁なサイズ変更において問題となります。

一般的に言って、トランスフォーム とテクスチャは、柔軟性と再利用という点で良い選択ではありません。しかし、アニメーションを行う場合は、より良いパフォーマンスを得るために、以下を行ってください。

  • 幅やその他のレイアウトプロパティの代わりに トランスフォーム を使用する。
  • 角やコーナーを丸くする代わりに、テクスチャや 2D スプライトを使用する。

動的アトラスのテクスチャを制御する

テクスチャの変更によって壊れるバッチの数を減らし、良好なパフォーマンスを達成するには、アトラスを使用して、同時に使用されるテクスチャをグループ化します。これは以下のいずれかの方法で実現できます。

  • スプライトアトラス を使う。この方法では、スプライトをより制御できますが、手動でスプライトアトラスを作成する必要があります。
  • 動的アトラスを使用する。UI Toolkit は、ビジュアル要素からテクスチャが参照されると、自動的に動的アトラスにテクスチャを追加したり、削除したりします。

動的アトラスのテクスチャを検証する

動的アトラスを使用してテクスチャをグループ化する場合、ドローコール の回数を制限するために、テクスチャが動的アトラスに入ることを確認します。確認するには、フレームデバッガー を使います。フレームデバッガーは、テクスチャの変化を観察し、バッチが壊れるのを推測するのに役立ちます。

以下の例では、動的アトラスにランタイム UI のすべてのテクスチャが含まれていることを確認します。

 Dynamic Atlas (動的アトラス) ウィンドウに、ランタイム UI のすべてのテクスチャが含まれています。
Dynamic Atlas (動的アトラス) ウィンドウに、ランタイム UI のすべてのテクスチャが含まれています。

ビルトインフィルターの適用

動的アトラステクスチャは、指定された最小サイズから開始し、必要に応じて水平または垂直方向に倍増し、指定された最大サイズまで拡大します。アトラスの最小サイズと最大サイズ は、Panel Settings アセットで定義できます。動的アトラスのフィルターを使って、サブテクスチャをアトラスに追加するかどうかを決めることもできます。

フィルターを有効または無効にするには、Panel Settings アセットの Inspector ウィンドウで、Dynamic Atlas Settings > Active Filters ドロップダウンリストからオプションを選択します。

カスタムフィルターの使用

カスタムフィルターをPanelSettings.dynamicAtlasSettings.customFilter に割り当て、グローバル、またはカスタムテクスチャ単位で、制限を加えたり緩めたりできます。

以下のカスタムフィルターの例は、大きなテクスチャに対しSize フィルターの適用を避け、一方、他のテクスチャに対して、Size フィルターをアクティブにしたままにします。

using UnityEngine;
using UnityEngine.UIElements;

class MyCustomFilter : MonoBehaviour
{
    public PanelSettings panelSettings;
    public Texture2D largeTexture;

    void OnEnable() { panelSettings.dynamicAtlasSettings.customFilter = Filter; }

    void OnDisable() { panelSettings.dynamicAtlasSettings.customFilter = null; }

    bool Filter(Texture2D texture, ref DynamicAtlasFilters filtersToApply)
    {
        if (texture == largeTexture)
        {
            // Disable the Size check for this one.
            filtersToApply &= ~DynamicAtlasFilters.Size;
        }
        return true;
    }
}

その他の参考資料

ランタイム UI イベントシステム
UI Toolkit を使用した入力およびイベントシステムに関する FAQ