UXML は、HTML、XAML、XML から発想を得た形式です。これらの形式を使ったことがある場合は、UXML との類似点に気付くでしょう。ただし、UXML 形式には Unity で効率よく使用できるように少し違う点があります。このページでは、UXML 形式を例を使って説明します。
以下は UXML サンプルファイルです。ユーザーに選択を求めるビルトイン UI コントロールがいくつか含まれています。
<?xml version="1.0" encoding="utf-8"?>
<UXML ...>
<Box>
<Toggle name="boots" label="Boots" value="false" />
<Toggle name="helmet" label="Helmet" value="false" />
<Toggle name="cloak" label="Cloak of invisibility" value="false"/>
</Box>
<Box>
<Button name="cancel" text="Cancel" />
<Button name="ok" text="OK" />
</Box>
</UXML>
上記の UXML 例では、コードの最初の行が UXML 宣言です。この宣言は任意です。UXML 宣言を入れる場合は、最初の行に置く必要があります。UXML 宣言には version が必要です。encoding 属性は、UXML 宣言では任意です。encoding 属性を入れる場合は、ファイルの文字エンコードを宣言する必要があります。
次の行はドキュメントルート <UXML> を定義します。<UXML> 要素には、名前空間プレフィックス定義の属性と、スキーマ定義ファイルの場所が含まれます。これらの属性は任意の順番で指定できます。
UI Toolkit では、各要素は UnityEngine.UIElements または UnityEditor.UIElements 名前空間のいずれかで定義されます。
UnityEngine.UIElements 名前空間は、Unity ランタイムの一部として定義された要素を含みます。UnityEditor.UIElements 名前空間は、Unity エディターで使用できる要素を含みます。要素を完全に指定するには、要素の名前空間の前に宣言する必要があります。例えば、UXML テンプレートで Button 要素を使用する場合は、<UnityEngine.UIElements:Button /> を指定する必要があります。
名前空間の指定を簡単にするために、名前空間プレフィックスを定義できます。例えば、xmlns:engine="UnityEngine.UIElements" は engine プレフィックスを UnityEngine.UIElements と定義します。名前空間プレフィックスを定義したら、それを使用して名前空間を指定できます。例えば、<engine:Button /> は <UnityEngine.UIElements:Button /> に相当します。
プレフィックスを除いてデフォルトの名前空間を定義することもできます。例えば、xmlns="UnityEngine.UIElements" は UnityEngine.UIElements をデフォルトの名前空間として定義します。例えば <Button /> を指定することは、<UnityEngine.UIElements:Button /> に相当します。
自動的に定義された名前空間を持つ UXML ファイルを作成するには、Asset > Create > UI Toolkit > UI Document を選択します。
ノート: 独自の要素を定義する場合は、UnityEngine.UIElements または UnityEditor.UIElements 名前空間でカスタムコントロールクラスを定義しないでください 。そうしないと、カスタムコントロールは非表示になります。
スキーマ定義で UXML ファイルが検証されます。各 UXML 要素に加えることができる属性と子要素を指定します。
UXML ファイルでは、<UXML> ルート要素の xsi:noNamespaceSchemaLocation 属性または xsi:schemaLocation 属性で、スキーマ定義ファイルの場所を指定します。
最新のスキーマ定義を持つ UXML ファイルを作成するには、Assets > Create > UI Toolkit > UI Document を選択します。ルート要素の xsi:noNamespaceSchemaLocation 属性を持つファイルが作成されます。
ノート: テキストエディタが xsi:noNamespaceSchemaLocation 属性を認識しない場合は、代わりに xsi:schemaLocation 属性を使用してください。
UXML スキーマ定義を強制的に更新するには、Assets > Update UXML Schema を選択します。
UI 定義は <UXML> ルート内にあります。UI 定義は一連のネストされた UXML 要素であり、それぞれがビジュアル要素を表します。
要素名は、インスタンス化する要素の C# クラス名に対応します。ほとんどの要素は属性を持ち、その値は C# の対応するクラスプロパティにマップされます。各要素は、親クラスの継承属性に加えて、独自の属性セットを持っています。VisualElement は、すべての要素の基本クラスであり、すべての要素の以下の属性を提供します。
name: 要素の識別子。名前は一意である必要があります。picking-mode: マウスイベントに応答するには Position に設定します。マウスイベントを無視するには Ignore に設定します。focus-index: (廃止) tabIndex と focusable を使用します。tabindex: 現在の要素のタブ位置を定義する整数。focusable: 要素がフォーカス可能かどうかを示すブーリアン。class: 要素を特徴付ける識別子のスペース区切りリスト。クラスを使用して要素にビジュアルスタイルを割り当てます。クラスを使用して、UQuery の一連の要素を選択することもできます。tooltip: マウスオーバーするとツールチップとして表示される文字列。view-data-key: 要素のシリアル化に使用されるキーを定義する文字列。