UI Builder에서 UXML 태그 이름을 커스터마이즈하고, 커스텀 컨트롤에 대한 커스텀 속성을 만들고, 속성 데코레이터를 추가할 수 있습니다.
기본적으로 커스텀 컨트롤에 대한 UXML의 태그 이름은 C# 클래스명입니다. 태그에 C# 클래스와 다른 이름을 사용하는 것은 권장하지 않습니다. 하지만 태그 이름을 커스터마이즈할 수 있는 옵션이 있습니다.
UXML 태그 이름을 커스터마이즈하려면 UxmlElement
속성에 name
인자를 추가합니다.
참고: 태그 이름은 고유해야 하며 UXML의 클래스 네임스페이스를 참조해야 합니다.
예를 들어 다음 커스텀 버튼을 생성한다고 가정해 보겠습니다.
[!code-cs[(Modules/UIElements/Tests/UIElementsExamples/Assets/Examples/UxmlElement_CustomButtonElement.cs)]
그런 다음 커스텀 이름이나 타입으로 UXML의 커스텀 버튼을 참조할 수 있습니다.
[!code-cs[(Modules/UIElements/Tests/UIElementsExamples/Assets/Examples/UxmlElement_CustomButtonElement.uxml)]
커스텀 컨트롤에 대한 새 속성을 생성하려면 커스텀 속성 정의에 UxmlAttribute
속성을 추가합니다. 기본적으로 UI 툴킷은 C# 카멜 표기법 또는 파스칼 표기법 속성 이름을 하이픈으로 연결된 소문자 단어로 변환합니다. 예를 들어, C#에서 MyFloat
또는 myFloat
라는 이름의 프로퍼티는 UXML 및 UI Builder에서 my-float
가 됩니다.
다음 예시에서는 여러 커스텀 속성이 있는 커스텀 컨트롤을 생성합니다.
[!code-cs[(Modules/UIElements/Tests/UIElementsExamples/Assets/Examples/UxmlElement_ExampleElement.cs)]
다음 예시 UXML 문서는 커스텀 컨트롤을 사용합니다.
[!code-cs[(Modules/UIElements/Tests/UIElementsExamples/Assets/Examples/UxmlElement_ExampleElement.uxml)]
구조체 또는 클래스 인스턴스를 속성으로 사용하고, 구조체 또는 클래스 인스턴스의 목록을 속성으로 사용할 수 있습니다. 이렇게 하려면 이를 문자열로 전환하거나 문자열에서 전환하고 UxmlAttributeConverter
를 선언하여 이러한 전환을 지원해야 합니다.
참고: 목록에서 클래스를 사용하는 경우 쉼표는 항목을 구분하는 데 사용되므로 문자열 표현에 쉼표(,
)가 포함되어 있지 않아야 합니다.
다음 예시에서는 커스텀 목록 속성이 포함된 커스텀 컨트롤을 생성합니다.
[!code-cs[(Modules/UIElements/Tests/UIElementsExamples/Assets/Examples/UxmlAttribute_MyClassWithData.cs)]
다음 예시에서는 커스텀 프로퍼티를 전환하고 UxmlAttributeConverter
를 선언하여 전환을 지원합니다.
[!code-cs[(Modules/UIElements/Tests/UIElementsExamples/Assets/Examples/UxmlAttribute_MyClassWithDataConverter.cs)]
다음 예시 UXML 문서는 커스텀 컨트롤을 사용합니다.
[!code-cs[(Modules/UIElements/Tests/UIElementsExamples/Assets/Examples/UxmlAttribute_MyClassWithDataConverter.uxml)]
UxmlAttribute
속성의 name
인자를 통해 속성 이름을 커스터마이즈할 수 있습니다.
다음 예시는 커스터마이즈된 속성 이름이 포함된 커스텀 컨트롤을 생성합니다.
[!code-cs[(Modules/UIElements/Tests/UIElementsExamples/Assets/Examples/UxmlAttribute_CustomAttributeNameExample.cs)]
다음 예시 UXML 문서는 커스텀 속성 이름을 사용합니다.
[!code-cs[(Modules/UIElements/Tests/UIElementsExamples/Assets/Examples/UxmlAttribute_CustomAttributeNameExample.uxml)]
속성 이름을 변경한 경우 이전 속성 이름을 가진 UXML 파일을 계속 사용할 수 있도록 하려면 UxmlAttribute
속성에 obsoleteNames
인자를 추가합니다.
다음 예시는 커스터마이즈되었으며 더 이상 사용되지 않는 속성 이름을 가진 커스텀 컨트롤을 생성합니다.
[!code-cs[(Modules/UIElements/Tests/UIElementsExamples/Assets/Examples/UxmlAttribute_CharacterDetails.cs)]
다음 예시 UXML 문서는 더 이상 사용되지 않는 이름을 사용합니다.
[!code-cs[(Modules/UIElements/Tests/UIElementsExamples/Assets/Examples/UxmlAttribute_CharacterDetails.uxml)]
커스텀 속성 필드에 다음과 같은 데코레이터 속성을 추가할 수 있습니다. 데코레이터 속성을 추가하면 Range
에 대한 슬라이더와 같은 해당 UI 컨트롤이 UI Builder의 인스펙터 탭에 표시됩니다.
다음 예시에서는 속성 필드에 데코레이터가 있는 커스텀 컨트롤을 생성합니다.
[!code-cs[(Modules/UIElements/Tests/UIElementsExamples/Assets/Examples/UxmlAttribute_ExampleText.cs)]
UI Builder는 데코레이터와 함께 속성을 표시합니다.
UI Builder의 필드에 커스텀 프로퍼티 드로어를 추가할 수 있습니다.
다음 예시는 커스텀 프로퍼티 드로어가 있는 커스텀 컨트롤을 생성합니다.
[!code-cs[(Modules/UIElements/Tests/UIElementsExamples/Assets/Examples/UxmlAttribute_MyDrawerExample.cs)]
다른 직렬화된 프로퍼티에 액세스하려면 이름 앞에 serializedData
를 추가합니다. 다음 코드 예시에서는 serializedData.myColor
를 사용하여 myColor
속성을 찾습니다.
[!code-cs[(Modules/UIElements/Tests/UIElementsExamples/Assets/Examples/UxmlAttribute_MyDrawerAttributePropertyDrawer.cs)]
커스텀 프로퍼티 드로어는 다음과 같이 표시됩니다.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.