Unity は UXML ファイルを C# の VisualTreeAsset
オブジェクトとして表現し、USS ファイルを C# の StyleSheet
オブジェクトとして表現します。VisualTreeAsset
と StyleSheet
は通常の 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 システムは、アプリケーションのコンテンツを整理してパッケージ化するためのツールやスクリプト、およびランタイムにアセットをロードして解放するための API を提供します。
UXML と USS アセットを Addressable システムで使用できます。
Unityで任意のアセットに Addressables を設定する方法については、Getting started with Addressables を参照してください。
プロジェクトに Resources
フォルダーを加え、その中に UI アセットを配置すると Resources.Load
メソッドを使用してアセットをロードできます。
以下の例は、Resources
フォルダーにあるアセットをロードする方法を示しています。
VisualTreeAsset uxml = Resources.Load<VisualTreeAsset>("main_window");
StyleSheet uss = Resources.Load<StyleSheet>("main_styles");
ノート: この方法は最終的なビルドサイズを大幅に増加させます。ビルドサイズが気になる場合は、代わりに Addressables
を使ってください。