Version: Unity 6.0 (6000.0)
言語 : 日本語
使用方法のヒントを使用して、描画呼び出しとジオメトリの再生成を削減
プラットフォームとメッシュに関する考慮事項

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

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

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

動的アトラスのテクスチャを確認する

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

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

この Dynamic Atlas ウィンドウの例には、ランタイム UI のすべてのテクスチャが含まれています。
この Dynamic Atlas ウィンドウの例には、ランタイム UI のすべてのテクスチャが含まれています。

ビルトインフィルターを適用する

動的アトラステクスチャは指定された最小サイズから始まり、必要に応じて拡大します。水平方向または垂直方向に 2 倍になり、指定された最大サイズまで拡大します。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 に表示されると、アトラスのサイズが Dynamic Atlas Settings で指定された Max Atlas Size 以上になるまで、新しい要素のテクスチャが動的アトラスに追加されます。

メモリが限られたデバイスでは、4096 ピクセルではなく 2048 ピクセルなど、Max Atlas Size をデフォルトよりも低く設定する必要が生じることがあります。

動的アトラスの断片化を管理する

テクスチャをアトラスに追加するか、アトラスから削除することで、断片化が生じて、以前のテクスチャがあった場所に、他のテクスチャに再割り当てするには小さすぎるスペースができることがあります。

アトラスの使用を最大化し、断片化を回避するには、RuntimePanelUtils.ResetDynamicAtlas() 拡張子メソッドを呼び出して、コンテンツを手動でリセットする必要があります。そのためには、VisualElementpanel プロパティにアクセスする必要があります。

例えば、大量のビジュアル要素を削除または追加するときには、アプリケーションの動作に基づいて動的アトラスをリセットすることを検討してください。

以下の例は RuntimePanelUtils.ResetDynamicAtlas() 拡張子メソッドの使用方法を示しています。

using UnityEngine;
using UnityEngine.UIElements;

[RequireComponent(typeof(UIDocument))]
class DynamicAtlasResetExample : MonoBehaviour
{
    VisualElement rootVisualElement => GetComponent<UIDocument>().rootVisualElement;

    public void OnEnable()
    {
        rootVisualElement.Add(new Button(ResetAtlas) { text = "Reset Dynamic Atlas"});
    }

    private void ResetAtlas()
    {
        rootVisualElement.panel.ResetDynamicAtlas();
    }

}

追加リソース

使用方法のヒントを使用して、描画呼び出しとジオメトリの再生成を削減
プラットフォームとメッシュに関する考慮事項