Version: 2022.1
언어: 한국어
UXML에 스타일 추가
UXML에서 다른 파일 레퍼런스

UXML 파일 재사용

템플릿으로 UXML 파일을 생성하여 다른 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 템플릿의 인스턴스를 만들 때 해당 요소의 기본 속성 값을 오버라이드할 수 있습니다.속성 오버라이드를 사용하면 동일한 템플릿을 인스턴스마다 다른 값으로 여러 번 인스턴스화할 수 있습니다.

속성 오버라이드

‘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에 실제로 표시되는 내용이 결정됩니다.

제한 사항

속성 오버라이드에는 다음과 같은 제한 사항이 있습니다.

  • 속성 오버라이드는 지정한 요소 이름에 따라 일치하는 속성을 찾습니다.USS 선택자 또는 UQuery를 사용하여 요소를 매칭할 수 없습니다.
  • 요소의 binding-path 속성을 오버라이드할 수 있지만, 속성 오버라이드에서는 데이터 바인딩이 작동하지 않습니다.
  • You can’t override an element’s name or style attributes.

추가 리소스

UXML에 스타일 추가
UXML에서 다른 파일 레퍼런스