템플릿으로 UXML 파일을 생성하여 다른 UXML 파일에서 재사용할 수 있습니다.
대규모 사용자 인터페이스를 디자인할 때 UI의 일부를 정의하는 템플릿 UXML 파일을 만들고, <Template>
및 <Instance>
요소를 사용하여 다른 UXML 파일로 임포트할 수 있습니다.
예를 들어 이미지, 이름, 레이블이 있는 세로 UI 요소가 있는 경우 다음 콘텐츠를 통해 Assets/Portrait.uxml
로 UXML 템플릿 파일을 만들 수 있습니다.
<ui:UXML ...>
<ui:VisualElement class="portrait">
<ui:Image name="portaitImage" style="--unity-image: url(\"a.png\")"/>
<ui:Label name="nameLabel" text="Name"/>
<ui:Label name="levelLabel" text="42"/>
</ui:VisualElement>
</ui:UXML>
그런 다음 다음과 같이 세로 템플릿을 재사용할 수 있습니다.
<ui:UXML ...>
<ui:Template src="/Assets/Portrait.uxml" name="Portrait"/>
<ui:VisualElement name="players">
<ui:Instance template="Portrait" name="player1"/>
<ui:Instance template="Portrait" name="player2"/>
</ui:VisualElement>
</ui:UXML>
UXML 템플릿의 인스턴스를 만들 때 해당 요소의 기본 속성 값을 오버라이드할 수 있습니다.속성 오버라이드를 사용하면 동일한 템플릿을 인스턴스마다 다른 값으로 여러 번 인스턴스화할 수 있습니다.
‘UXML’ 태그로 속성을 오버라이드할 수 있습니다.속성을 오버라이드하려면 다음을 지정하십시오.
element-name
속성입니다.예를 들어 게임의 각 플레이어에게 동일한 정보 세트를 표시하려면 UXML 템플릿을 생성하고 속성 오버라이드를 사용하여 플레이어별 인스턴스를 생성할 수 있습니다.
먼저 다음 콘텐츠로 MyTemplate.uxml
과 같은 템플릿을 만듭니다.
<UXML xmlns="Unityui.UIElements">
<Label name="player-name-label" text="default name" />
<Label name="player-score-label" text="default score" />
</UXML>
그런 다음 다른 UXML 파일에서 인스턴스화하고 해당 속성을 오버라이드하여 각 플레이어의 이름과 점수를 표시합니다.
<UXML xmlns="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements">
<Template src="MyTemplate.uxml" name="MyTemplate" />
<Instance name="player1" template="MyTemplate">
<!-- Alice is the new value of the text attribute for the player-name-label -->
<AttributeOverrides element-name="player-name-label" text="Alice" />
<!-- 2 is the new value of the text attribute for the player-score-label -->
<AttributeOverrides element-name="player-score-label" text="2" />
</Instance>
<Instance name="player2" template="MyTemplate">
<!-- Bob is the new value of the text attribute for the player-name-label -->
<AttributeOverrides element-name="player-name-label" text="Bob" />
<!-- 1 is the new value of the text attribute for the player-score-label -->
<AttributeOverrides element-name="player-score-label" text="1" />
</Instance>
</UXML>
오버라이드당 두 개 이상의 속성을 지정할 수 있습니다. 예를 들어 다음 구문은 player-name-label
이라는 인스턴스에서 요소를 찾아 다음을 수행합니다.
text
속성의 기본값을 새로운 값 Alice
로 오버라이드합니다.tooltip
속성의 기본값을 새로운 값 Tooltip 1
로 오버라이드합니다.<AttributeOverrides element-name="player-name-label" text="Alice" tooltip="Tooltip 1" />
속성 오버라이드는 요소 계층 구조에서 중첩된 템플릿을 통해 전파됩니다. 예를 들어 템플릿 A는 템플릿 B를 인스턴스화하고, 템플릿 B는 템플릿 C를 인스턴스화하는 경우 템플릿 A와 템플릿 B는 둘 다 템플릿 C의 속성을 오버라이드할 수 있습니다.
중첩된 템플릿에서 속성을 오버라이드하면 가장 깊은 오버라이드가 우선합니다.위의 예에서 템플릿 A와 템플릿 B가 모두 템플릿 C의 동일한 속성을 오버라이드하는 경우, 템플릿 B의 오버라이드에 따라 렌더링된 UI에 실제로 표시되는 내용이 결정됩니다.
속성 오버라이드에는 다음과 같은 제한 사항이 있습니다.
binding-path
속성을 오버라이드할 수 있지만, 속성 오버라이드에서는 데이터 바인딩이 작동하지 않습니다.name
or style
attributes.