Unity 사용자 매뉴얼: 커스텀 컨트롤 만들기
이 문서는 Unity에서 커스텀 UI 컨트롤을 만드는 방법에 대한 안내입니다. UI 툴킷을 활용하여 UXML 파일을 통해 커스텀 요소를 정의하고 사용할 수 있습니다.
UXML 및 UI 빌더에 커스텀 컨트롤 노출
UXML 및 UI 빌더에서 커스텀 컨트롤을 사용하려면 해당 컨트롤을 노출시키는 과정이 필요합니다.
1. 팩토리 정의
새로운 요소를 정의하기 위해 VisualElement
또는 하위 클래스를 파생하여 새 클래스를 생성합니다. 이 클래스는 기본 생성자를 반드시 구현해야 합니다.
예제:
class StatusBar : VisualElement
{
public StatusBar()
{
m_Status = String.Empty;
}
string m_Status;
public string status { get; set; }
}
2. 팩토리 클래스 정의
UI 툴킷이 UXML 파일을 읽을 때 새 클래스를 인스턴스화하려면 클래스에 대한 팩토리를 정의해야 합니다. 특별한 작업 없이 사용할 경우 UxmlFactory<T>
에서 파생할 수 있습니다.
예제:
class StatusBar : VisualElement
{
public new class UxmlFactory : UxmlFactory<StatusBar> {}
// ...
}
이 팩토리를 정의한 후, UXML 파일에서 <StatusBar>
요소를 사용할 수 있습니다.
3. 속성 정의
새로운 클래스에 대해 UXML 특성을 정의하고 해당 팩토리가 그러한 특성을 사용하도록 설정할 수 있습니다.
예제:
class StatusBar : VisualElement
{
public new class UxmlFactory : UxmlFactory<StatusBar, UxmlTraits> {}
public new class UxmlTraits : VisualElement.UxmlTraits
{
UxmlStringAttributeDescription m_Status = new UxmlStringAttributeDescription { name = "status" };
public override IEnumerable<UxmlChildElementDescription> uxmlChildElementsDescription
{
get { yield break; }
}
public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc)
{
base.Init(ve, bag, cc);
((StatusBar)ve).status = m_Status.GetValueFromBag(bag, cc);
}
}
// ...
}
UxmlTraits 역할
- 팩토리가 새로 생성된 오브젝트를 초기화하는 데 사용됩니다.
- XML 스키마 지시문으로 변환하기 위해 요소에 대한 정보를 분석합니다.
속성 타입 지원
UI 툴킷은 다양한 타입의 속성을 지원하며, 각 속성은 C# 타입을 UXML 타입에 연결합니다.
속성 타입 | 설명 |
---|---|
UxmlStringAttributeDescription | 문자열 |
UxmlFloatAttributeDescription | 단일 정밀도 부동 소수점 값 |
UxmlDoubleAttributeDescription | 이중 정밀도 부동 소수점 값 |
UxmlIntAttributeDescription | 정수 값 |
UxmlLongAttributeDescription | 긴 정수 값 |
UxmlBoolAttributeDescription | true 또는 false |
UxmlColorAttributeDescription | USS 포맷으로 정의된 컬러 문자열 |
UxmlEnumAttributeDescription |
Enum 타입 T에 대한 값 중 하나 |
UxmlTypeAttributeDescription |
타입의 어셈블리 자격 이름 문자열 |
네임스페이스 접두사 정의
새 요소를 정의하고 나면 UXML 파일에서 해당 요소를 사용할 수 있습니다. 새로운 네임스페이스를 정의하면 접두사를 설정할 수 있습니다.
예제:
[assembly: UxmlNamespacePrefix("My.First.Namespace", "first")]
[assembly: UxmlNamespacePrefix("My.Second.Namespace", "second")]
추가 리소스
- 커스텀 컨트롤 만들기
- 두 가지 속성을 가진 커스텀 컨트롤 만들기
- 슬라이드 토글 커스텀 컨트롤 만들기
- 방사형 진행률 표시기 만들기
- 바인딩 가능한 커스텀 컨트롤 만들기
- 커스텀 컨트롤에 대한 커스텀 스타일 만들기
참고
본 내용은 Unity Technologies의 지침을 토대로 작성되었습니다. 더욱 자세한 사항은 Unity의 공식 문서를 참조하시기 바랍니다.