커스텀 컨트롤을 만들려면 커스텀 컨트롤 C# 클래스를 생성하고 초기화해야 합니다.UXML 및 UI 빌더에서 사용할 수 있도록 노출할 수 있습니다.데이터에 바인딩할 수도 있습니다.
VisualElement
클래스 또는 VisualElement
클래스의 하위 클래스에서 파생된 C# 클래스를 생성합니다.예를 들어, BindableElement
대신 BaseField
의 일반 기본 클래스에서 파생된 바인딩 가능한 커스텀 컨트롤을 만들 수 있습니다.이것은 다음과 같은 이점이 있습니다.
InotifyValueChanged
인터페이스 구현참고:내부 계층 구조와 기존 USS 클래스를 이해한다면 빌트인 UI 컨트롤에서 파생된 커스텀 컨트롤을 만들 수 있습니다.커스텀 컨트롤은 향후 변경될 수 있는 내부 구조에 따라 달라질 수 있으므로 Unity는 이러한 관행을 권장하지 않습니다.
커스텀 컨트롤은 VisualElement
에서 상속됩니다.VisualElement
는 게임 오브젝트의 수명에 바인딩되지 않으며, 다음 콜백을 수신하지 않습니다.
Awake()
OnEnable()
OnDisable()
OnDestroy()
생성자에서 커스텀 컨트롤을 초기화할 수 있습니다.그러나 애플리케이션에 필요한 경우 커스텀 컨트롤이 UI에 추가될 때까지 초기화를 지연시킬 수 있습니다.이렇게 하려면 AttachToPanelEvent
에 대한 콜백을 등록합니다.UI에서 커스텀 컨트롤이 제거되었는지 감지하려면 DetachFromPanelEvent
콜백을 사용합니다.
void OnEnable()
{
var myCustomElement = rootVisualElement.Q(className:"my-custom-element");
myCustomElement.RegisterCallback<AttachToPanelEvent>(e =>
{ /* do something here when element is added to UI */ });
myCustomElement.RegisterCallback<DetachFromPanelEvent>(e =>
{ /* do something here when element is removed from UI */ });
}
UI 툴킷은 모든 요소에 대해 이 두 이벤트를 디스패치하며 커스텀 VisualElement
서브 클래스가 필요하지 않습니다.자세한 내용은 패널 이벤트를 참조하십시오.
커스텀 컨트롤을 UXML 및 UI 빌더에서 사용하려면 해당 컨트롤을 노출해야 합니다.커스텀 컨트롤을 노출하려면 UxmlFactory<T>
에서 파생된 팩토리 클래스를 정의합니다.
커스텀 컨트롤에 새 속성을 추가하여 UXML에서 사용할 수 있습니다.커스텀 컨트롤에 새 속성을 추가하려면 요소에서 속성 정의에 설명된 대로 UxmlTraits
에서 파생된 특성 클래스를 정의하고 Init()
메서드를 오버라이드하십시오.UI 빌더는 이것을 사용하여 인스펙터에서 UXML 프로퍼티 값을 변경할 때 뷰포트용으로 생성된 시각적 요소가 업데이트되게 합니다.
UI 빌더의 인스펙터에서 커스텀 컨트롤의 UXML 프로퍼티를 사용하려면 UXML과 C# 스크립트 간에 프로퍼티 이름을 일치시켜야 합니다.UXML에 대해 표준 케밥 케이스 표기법을 사용하고, C#에 대해 카멜 케이스 또는 파스칼 케이스를 사용합니다.예를 들어, C#에서 MyFloat
또는 myFloat
라는 프로퍼티는 UXML에서는 my-float
가 되어야 합니다.
커스텀 컨트롤을 직렬화된 프로퍼티에 바인딩하여 컨트롤과 프로퍼티 간의 값을 동기화할 수 있습니다.
커스텀 컨트롤을 데이터에 바인딩하려면:
INotifyValueChanged
인터페이스를 구현하고 ChangeEvent
를 수신 대기합니다.BindableElement
](../ScriptReference/UIElements.BindableElement.html) 클래스에서 상속하거나 IBindable
인터페이스를 구현합니다.자세한 내용은 SerializedObject 데이터 바인딩을 참조하십시오.
바인딩 가능한 커스텀 컨트롤의 예는 바인딩 가능한 커스텀 컨트롤 만들기를 참조하십시오.
USS를 사용하여 빌트인 컨트롤과 동일한 방식으로 커스텀 컨트롤의 모양을 커스터마이즈할 수 있습니다.커스텀 컨트롤의 스타일을 지정하기 위해 USS 커스텀 프로퍼티를 생성할 수도 있습니다.
참고:UI 빌더의 인스펙터 창에 USS 커스텀 프로퍼티가 표시되지 않습니다.USS 커스텀 프로퍼티를 편집하려면 텍스트 에디터를 사용하여 USS 파일을 직접 편집합니다.
C#에서 커스텀 컨트롤의 커스텀 USS 프로퍼티와 상호 작용하려면 CustomStyleProperty
구조체와 CustomStylesResolvedEvent
이벤트를 사용하십시오.
CustomStyleProperty
는 스타일시트에서 읽은 프로퍼티의 이름과 타입을 설명합니다.
UI 툴킷은 커스텀 USS 프로퍼티를 직접 수신하는 모든 요소에 대해 CustomStylesResolvedEvent
를 디스패치합니다.선택자가 일치하는 모든 요소, 규칙에 커스텀 프로퍼티 값이 포함된 선택자에 대해 이벤트를 디스패치합니다.UI 툴킷은 값을 상속하는 요소에 대해서는 이벤트를 디스패치하지 않습니다.이벤트는 ICustomStyle
오브젝트에 대한 레퍼런스를 보유합니다.CustomStyleProperty
의 유효 값을 읽으려면 TryGetValue()
메서드를 사용해야 합니다.이 메서드에는 다양한 타입의 CustomStyleProperty
에 대한 오버로드가 있습니다.
커스텀 컨트롤 예제가 포함된 커스텀 스타일은 커스텀 컨트롤에 대한 커스텀 스타일 만들기를 참조하십시오.
참고:커스텀 스타일 프로퍼티에 대한 전환을 정의할 수 없습니다.
커스텀 컨트롤의 이벤트 처리 방법에 대한 자세한 내용은 이벤트 처리를 참조하십시오.
참고:
UI 빌더에서 시각적 트리에 커스텀 컨트롤을 추가하려면:
베스트 프랙티스:
EventBase.currentTarget
프로퍼티를 통해 검색할 수 있습니다.팁:
커스텀 컨트롤에 대한 generateVisualContent
콜백을 통해 커스텀 지오메트리를 렌더링합니다.부분적으로 채워진 원을 렌더링하는 예제 사용법은 RadialProgress 예제를 참조하십시오.
커스텀 컨트롤은 편리합니다.그러나 다음과 같은 방법으로도 동일한 결과를 얻을 수 있습니다.
MonoBehaviour'를 사용하여 UI를 담고 있는 특정 UI 문서와 관련된 로직을 추가하십시오.(
MonoBehaviour를 사용하여 UI 문서에서 UI를 제어하는 방법을 알아보려면 [첫 번째 런타임 UI 만들기](UIE-HowTo-CreateRuntimeUI.html)를 참조하십시오).캡슐화를 달성하려면
MonoBehaviour내부에 [UQuery](UIE-UQuery.html)로 [
VisualElement`](../ScriptReference/UIElements.VisualElement.html)를 내부적으로 가져오고 해당 프로퍼티를 조작하는 프로퍼티와 메서드를 생성하십시오.