UnityのUI ToolkitでUXMLファイルから他のUXMLやUSSを指定する4つの方法とその違いについてまとめました。
Unity 2022.2.17
はじめに
UXMLファイルから他のUXMLファイルを指定することで、UXMLファイルをテンプレートとして使い回すことができます。
また、Style要素を使うことでそのUXMLファイルに適用するUSSを指定することができます。
本記事では、このようにUXMLファイルからUXMLやUSSを指定する際の指定方法についてまとめます。
UXMLの位置からの相対パスで指定する
src
アトリビュートを使うと、UXMLの位置からの相対パスを使って指定することができます。
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False"> <ui:Template src="../Templates/example_template.uxml" name="Example"/> <ui:Instance template="Example" /> </ui:UXML>
このsrc
アトリビュートを使う方法では、参照先のファイルがなかったらインポート時にエラーになるため、エラーに気づきやすいというメリットがあります。
アセットパスで指定する
src
アトリビュートにはアセットパスを指定することもできます。
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False"> <ui:Template src="/Assets/Example/Editor/Templates/example_template.uxml" name="Example"/> <ui:Instance template="Example" /> </ui:UXML>
明確にアセットパスであることを区別するためにproject:
プレフィックスをつけることもできます。
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False"> <ui:Template src="project:/Assets/Example/Editor/Templates/example_template.uxml" name="Example"/> <ui:Instance template="Example" /> </ui:UXML>
Resourcesフォルダを使う
path
アトリビュートを使うと、テンプレート用のUXMLファイルやUSSファイルをResourcesフォルダに格納しておき、それを読み込むことができます。
この場合には通常のResourcesフォルダからの読み込みと同様、Resourcesフォルダからの相対パスを拡張子なしで指定します。
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False"> <ui:Template path="example_template" name="Example"/> <ui:Instance template="Example" /> </ui:UXML>
この場合にはsrc
アトリビュートとは異なり、パスが間違えていてもインポート時にはエラーが出ないので注意が必要です。
Editor Default Resourcesフォルダを使う
Resourcesフォルダの代わりにEditor Default Resourcesフォルダを使うこともできます。
この場合にはEditor Default Resourcesの仕様に合わせて、フォルダからの相対パスを拡張子ありで指定する必要があります。
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False"> <ui:Template path="example_template.uxml" name="Example"/> <ui:Instance template="Example" /> </ui:UXML>