Unity 사용자 매뉴얼 - 커스텀 컨트롤 만들기
Unity에서 커스텀 컨트롤을 만들기 위한 방법과 다양한 활용 예제에 대해 설명합니다.
커스텀 컨트롤 개요
커스텀 컨트롤은 VisualElement 클래스 또는 그 하위 클래스에서 파생된 C# 클래스를 사용하여 생성됩니다. 커스텀 컨트롤을 만들고 초기화하여 UI 빌더와 UXML에 노출할 수 있으며, 데이터 바인딩도 가능합니다.
커스텀 컨트롤 클래스 만들기
VisualElement
또는BindableElement
와 같이 기본 클래스에서 상속받은 클래스를 생성합니다.INotifyValueChanged
인터페이스를 구현하여 값의 변경을 감지할 수 있습니다.- 기본적인 UI 레이아웃을 설정합니다. 예를 들어, 왼쪽에는 레이블 요소, 오른쪽에는 입력 요소가 배치된 형태로 설정할 수 있습니다.
예시
public class MyCustomControl : BaseField<float>
{
// 커스텀 컨트롤의 세부 구현
}
커스텀 컨트롤 초기화
커스텀 컨트롤은 생성자에서 초기화할 수 있으며, UI에 추가될 때까지 초기화를 지연시킬 수 있습니다.
사용 예시
void OnEnable()
{
var myCustomElement = rootVisualElement.Q(className: "my-custom-element");
myCustomElement.RegisterCallback<AttachToPanelEvent>(e =>
{
// UI에 추가될 때 동작
});
myCustomElement.RegisterCallback<DetachFromPanelEvent>(e =>
{
// UI에서 제거될 때 동작
});
}
UXML 및 UI 빌더에 커스텀 컨트롤 노출
커스텀 컨트롤을 UXML 및 UI 빌더에서 사용하기 위해서는 해당 컨트롤을 노출하는 팩토리 클래스를 정의해야 합니다. 이때, UXML 속성과 C# 프로퍼티 이름이 일치해야 합니다.
C# 프로퍼티 | UXML 속성 |
---|---|
myFloat | my-float |
myInt | my-int |
데이터에 바인딩
커스텀 컨트롤을 직렬화된 프로퍼티에 바인딩하여 값의 동기화를 가능하게 만들 수 있습니다. BindableElement
에서 상속받아 바인딩 기능을 구현합니다.
커스텀 스타일링
커스텀 컨트롤은 USS를 사용하여 스타일을 지정할 수 있으며, 필요한 경우 커스텀 USS 프로퍼티를 생성하고 직접 수정할 수 있습니다.
예시
CustomStyleProperty<int> myCustomStyle = new CustomStyleProperty<int>("--my-custom-property");
이벤트 처리
커스텀 컨트롤의 이벤트 처리는 Unity의 이벤트 처리 방식과 동일하게 진행될 수 있습니다. 키보드 및 마우스 이벤트 처리를 위해 생성자에서 해당 이벤트 유형에 대한 콜백을 등록합니다.
UI 빌더에서 커스텀 컨트롤 사용하기
- UI 빌더에서
Library > Project > Custom Controls (C#)
선택 - 커스텀 컨트롤을 계층 창으로 드래그합니다.
베스트 프랙티스
- 커스텀 컨트롤의 외부 인터페이스 및 기능은 UXML 속성으로 노출하고, 모양과 관련된 프로퍼티는 USS 프로퍼티로 노출하는 것이 좋습니다.
- UXML의 데이터 형식은 기본 데이터 형식 집합에 제한되므로 주의해야 합니다.
- C# 코드에서는 클래스 이름이나 속성을 상수로 정의하여 사용합니다.
추가 리소스
- 커스텀 컨트롤 만들기
- 슬라이드 토글 커스텀 컨트롤 만들기
- 방사형 진행률 표시기 만들기
- 바인딩 가능한 커스텀 컨트롤 만들기
- 커스텀 스타일 만들기
이 문서는 Unity의 커스텀 컨트롤 생성에 대한 기본 이해를 돕기 위한 것이며, 제공된 코드 예시는 실제 구현 시 참고용입니다.