Version: 2023.1
言語: 日本語
UXML から他のファイルを参照する
C# スクリプトから UXML をインスタンス化する

UXML と USS C# スクリプトのロード

Unity は UXML ファイルを C# の VisualTreeAsset オブジェクトとして表現し、USS ファイルを C# の StyleSheet オブジェクトとして表現します。VisualTreeAssetStyleSheet は通常の Unity アセットなので、Unity の標準ワークフローを使ってロードすることができます。

シリアル化参照を使用する

Unity は、C# スクリプトから VisualTreeAsset 型または StyleSheet 型のフィールドを自動的に検出します。Inspector を使用して、プロジェクトにインポートされた特定の UXML ファイルや USS ファイルへの参照を設定できます。このような参照は、プロジェクト内でアセットの場所が変わっても有効です。

スクリプトでこれを使用するには 3 つの方法があります。

説明  Inspector の表示方法 参照の保存場所
カスタムスクリプトのインスタンス (MonoBehaviour など) スクリプトのインスタンスを保持しているゲームオブジェクトを選択します。 シーン内
EditorWindow または Editor から派生したスクリプトのデフォルトの参照 Project ブラウザーで実際の C# ファイルを選択します。 スクリプトに関連するメタファイル内
ScriptableObject から派生した、プロジェクト内のカスタムアセット Project ブラウザーのアセットを選択します。 アセット本体のシリアル化されたデータ内

ノート: デフォルトの参照は、MonoBehaviour または ScriptableObject から派生するすべてのスクリプトで機能します。これは、スクリプトのシリアル化されたフィールドにデフォルト値を入力する方法を提供します。

以下の例の MonoBehaviour クラスは、Inspector から UXML ファイルのリストと USS ファイルを受け取ります。

using UnityEngine;
using UnityEngine.UIElements;

public class MyBehaviour : MonoBehaviour
{
  // Note that public fields are automatically exposed in the Inspector
  public VisualTreeAsset mainUI;
  [Reorderable]
  public StyleSheet[] seasonalThemes;
}

以下の例の EditorWindow クラスは、Inspector からデフォルトの参照を受け取ります。

using UnityEditor;
using UnityEngine.UIElements;

public class MyWindow : EditorWindow
{
  [SerializeField]
  private VisualTreeAsset uxml;
  [SerializeField]
  private StyleSheet uss;
}

アセットデータベースを使用する (エディターのみ)

AssetDatabase クラスを使用すると、パスまたは GUID で UI Asset をロードできます。

以下の例は、アセットをパスで検索する方法を示しています。

VisualTreeAsset uxml = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/Editor/main_window.uxml");
StyleSheet uss = AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/Editor/main_styles.uss");

以下の例は、アセットをパッケージからのパスで検索する方法を示しています。

VisualTreeAsset uxml = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Packages/<name-of-the-package>/main_window.uxml");
StyleSheet uss = AssetDatabase.LoadAssetAtPath<StyleSheet>("Packages/<name-of-the-package>/main_styles.uss");

Addressables を使用する (ランタイムのみ)

Addressables システムは、アプリケーションのコンテンツを整理してパッケージ化するためのツールやスクリプト、およびランタイムにアセットをロードして解放するための API を提供します。

UXML と USS アセットを Addressable システムで使用できます。

Unityで任意のアセットに Addressables を設定する方法については、Getting started with Addressables を参照してください。

Resources フォルダーを使用する

プロジェクトに Resources フォルダーを加え、その中に UI アセットを配置すると Resources.Load メソッドを使用してアセットをロードできます。

以下の例は、Resources フォルダーにあるアセットをロードする方法を示しています。

VisualTreeAsset uxml = Resources.Load<VisualTreeAsset>("main_window");
StyleSheet uss = Resources.Load<StyleSheet>("main_styles");

ノート: この方法は最終的なビルドサイズを大幅に増加させます。ビルドサイズが気になる場合は、代わりに Addressables を使ってください。

その他の参考資料

UXML から他のファイルを参照する
C# スクリプトから UXML をインスタンス化する