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

C# スクリプトから UXML と USS をロードする

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;
}

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

UI アセットは、パスまたは GUID を AssetDatabase クラスとともに使用してロードできます。

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

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 が用意されています。

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

Unity のアセットに Addressables を設定する方法については、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 のインスタンス化