Version: Unity 6.0 (6000.0)
언어 : 한국어
SerializedObject 데이터 바인딩
바인드 가능 요소 레퍼런스

SerializedObject 데이터 바인딩 소개

SerializedObject 데이터 바인딩 시스템을 사용하여 직렬화된 프로퍼티에 바인딩할 수 있습니다. 즉, 시각적 요소를 직렬화 시스템과 호환되는 다음 오브젝트에 바인딩할 수 있습니다.

  • 사용자 정의 ScriptableObject 클래스
  • 사용자 정의 MonoBehaviour 클래스
  • 네이티브 Unity 컴포넌트 유형
  • 네이티브 Unity 에셋 유형
  • int, bool 또는 float와 같은 기본 C# 유형
  • Vector3, Color 또는 Object와 같은 네이티브 Unity 유형

값 바인딩

INotifyValueChanged 인터페이스를 구현하는 시각적 요소의 value 프로퍼티만 바인딩할 수 있습니다. 예를 들어 TextField.valuestring에 바인딩할 수 있지만, TextField.namestring에 바인딩할 수는 없습니다.

오브젝트와 BindableElement에서 파생되거나 IBindable 인터페이스를 구현하는 모든 시각적 요소를 바인딩할 수 있습니다.

바인딩 만들기

바인딩을 만들려면 Bind() 또는 BindProperty()를 호출합니다.

운영체제의 기본 디바이스를 사용하고 싶은 경우, 이 디바이스로 Bind()

Bind()를 호출하여 요소를 SerializedObject에 바인딩할 수 있습니다. 요소를 바인딩하기 전에 바인딩 경로를 설정하고 SerializedObject를 생성해야 합니다.

바인딩의 SerializedProperty에 쉽게 액세스할 수 없는 경우 이 방법을 사용합니다. 예시는 C# 스크립트로 바인딩 만들기를 참조하십시오.

Bind() 확장 메서드는 지정된 bindingPath 프로퍼티를 포함한 시각적 요소의 전체 계층 구조를 설정합니다. 바인딩하려는 계층 구조의 부모 또는 단일 요소에 대해 Bind() 메서드를 호출할 수 있습니다. 예를 들어 에디터 창의 rootVisualElement에서 Bind()를 호출할 수 있습니다. 지정된 bindingPath 프로퍼티를 가진 모든 자식 요소를 바인딩합니다.

Editor.CreateInspectorGUI() 또는 PropertyDrawer.CreatePropertyGUI() 오버라이드에서 Bind()를 호출하지 마십시오. 이러한 오버라이드는 이러한 메서드가 반환하는 시각적 요소에서 자동으로 호출됩니다.

운영체제의 기본 디바이스를 사용하고 싶은 경우, 이 디바이스로 Unbind()

Unbind() 메서드는 요소와 그 모든 직접 및 간접 자식 요소에 대한 값 추적을 중지합니다. 일반적으로 사용자가 인스펙터 또는 에디터 창을 닫으면 추적이 중지되므로 Unbind()를 호출할 필요가 없습니다. 수명 주기에서 요소를 다른 타겟에 바인딩해야 하는 경우 Unbind()를 호출합니다.

생성자를 호출하여 C#에서 InspectorElement를 구성하는 경우, 생성자 호출 중에 바인딩이 발생합니다. 구성된 InspectorElement을 다시 바인딩하려면 Unbind()를 호출한 다음 Bind()를 명시적으로 호출하거나 부모의 바인딩 작업으로 바인딩을 생성해야 합니다.

바인딩 경로 설정

바인딩을 생성하기 위해 Bind()를 호출하는 경우 시각적 요소의 바인딩 경로를 바인딩하려는 오브젝트의 프로퍼티 이름으로 설정해야 합니다.

예시:

  • 다음과 같은 컴포넌트 스크립트가 있는 경우:

    using UnityEngine;
    
    public class MyComp : MonoBehaviour
    {
        [SerializeField]
        int m_Count;
    }
    

    시각적 요소를 m_Count에 바인딩하려면 바인딩 경로를 m_Count로 설정합니다.

  • 시각적 요소를 게임 오브젝트의 이름 프로퍼티인 m_Name에 바인딩하려면 바인딩 경로를 m_Name으로 설정합니다.

바인딩 경로는__ UI__(사용자 인터페이스) 사용자가 애플리케이션과 상호 작용하도록 해 줍니다. Unity는 현재 3개의 UI 시스템을 지원합니다. 자세한 정보
See in Glossary
빌더, UXML 또는 C# 스크립트를 사용하여 설정할 수 있습니다.

운영체제의 기본 디바이스를 사용하고 싶은 경우, 이 디바이스로 BindProperty()

요소를 직접 SerializedProperty에 바인딩하려면 BindProperty()를 호출할 수 있습니다.

이미 SerializedProperty 오브젝트가 있는 경우, 특히 SerializedObject의 프로퍼티를 횡단하여 UI를 동적으로 구축하는 경우 이 방법을 사용합니다. 예시는 바인딩 경로 없이 바인딩을 참조하십시오.

중첩된 프로퍼티에 요소 바인딩

시각적 요소를 소스 오브젝트의 중첩된 프로퍼티에 바인딩할 수 있습니다. 이를 위해 요소의 바인딩 경로를 첫 번째 조상의 바인딩 경로와 결합합니다. 다음 요소와 함께 이 메서드를 사용합니다.

예시는 중첩된 프로퍼티 바인딩을 참조하십시오.

값 변경 시 콜백 수신

바인딩되고 직렬화된 프로퍼티가 변경될 때 콜백을 수신하기 위해 바인딩을 생성할 수 있습니다. 이렇게 하려면 모든 VisualElement가 사용할 수 있는 TrackPropertyValue() 확장 메서드를 활용하십시오. 제공된 SerializedProperty가 변경될 때 실행되는 콜백을 등록합니다. 예시는 직렬화된 프로퍼티가 변경될 때 콜백을 수신을 참조하십시오.

바인딩되고 직렬화된 오브젝트의 프로퍼티가 변경될 때 콜백을 수신하기 위한 바인딩을 생성할 수도 있습니다. 이렇게 하려면 모든 VisualElement가 사용할 수 있는 TrackSerializedObjectValue() 확장 메서드를 활용하십시오. 제공된 SerializedProperty가 변경될 때 실행되는 콜백을 등록합니다. 예시는 프로퍼티가 변경될 때 콜백 수신을 참조하십시오.

커스텀 요소 바인딩

커스텀 요소를 생성하고 값 바인딩 시스템을 통해 직렬화된 프로퍼티에 바인딩할 수 있습니다.

바인딩 가능한 커스텀 요소를 만들려면 다음 단계를 따르십시오.

  1. 커스텀 요소를 선언합니다.
  2. BindableElement에서 요소를 상속하거나 IBinding 인터페이스를 구현합니다.
  3. INotifyValueChanged 인터페이스를 구현합니다.
  4. SetValueWithoutNotify() 메서드를 INotifyValueChanged 인터페이스에 구현합니다.
  5. value 프로퍼티 액세서를 INotifyValueChanged 인터페이스에 구현합니다.

예시는 커스텀 컨트롤 만들기 및 스타일 지정을 참조하십시오.

참고: 바인딩 시스템을 사용하면 enum의 SerializedPropertyType에서 지원하는 유형에만 요소를 바인딩할 수 있으므로 커스텀 데이터 형식을 커스텀 요소에 직접 바인딩할 수 없습니다. 즉, 클래스나 구조체(예: MyStruct라는 구조체)를 정의하여 INotifyValueChanged<MyStruct>를 구현하는 요소에 바인드할 수 없습니다. 하지만 커스텀 데이터 형식의 직렬화 가능한 중첩된 프로퍼티에는 바인딩할 수 있습니다. 여기에는 다형성 직렬화가 포함됩니다(필드가 [SerializeReference] 속성을 사용하는 경우). 예시는 커스텀 컨트롤을 커스텀 데이터 형식에 바인딩을 참조하십시오.

베스트 프랙티스

생성하는 UI 유형에 따라 바인딩은 다양한 시점에 발생합니다. 이것을 바인드 시간이라고 합니다.

다음 표에서는 컨트롤의 바인드 시간을 설명합니다.

조건 자동 바인드 시간(바인딩 경로가 설정되었다고 가정)
C#으로 구성된 InspectorElement 생성자 호출 중
해당 메서드가 반환될 때 CreateInspectorGUI() 또는 CreatePropertyGUI()의 반환 값 이하인 자식 요소 CreateInspectorGUI() 또는 CreatePropertyGUI() 반환 후
부모 요소에서 Bind() 또는 BindProperty()가 호출될 때 요소 아래에 있는 자식 요소 Bind() 또는 BindProperty() 호출 중
Other 자동 바인딩이 지원되지 않으므로 요소 또는 부모 요소 중 하나를 수동으로 바인딩해야 합니다.

다음은 바인드 시간과 관련된 바인딩을 만들 때의 베스트 프랙티스입니다.

  • 커스텀 Editor 또는 커스텀 PropertyDrawer를 생성하는 경우, CreateInspectorGUI() 또는 CreatePropertyGUI()의 본문 끝 시각적 트리에 있는 시각적 요소에 Bind() 또는 BindProperty()를 호출하는 대신 요소의 바인딩 경로를 설정합니다. 이러한 요소는 CreateInspectorGUI() 또는 CreatePropertyGUI() 반환 후 자동으로 바인딩됩니다. 그러나 해당 지점 이후에 시각적 트리에 요소를 추가하면 Bind() 또는 BindProperty()를 호출하여 바인딩합니다.
  • 다른 UI 유형을 생성하는 경우 요소가 시각적 트리에 추가되는 시간에 관계없이 Bind() 또는 BindProperty()를 호출합니다. Bind() 또는 BindProperty()를 호출하고 여러 컨트롤을 동시에 바인딩하는 경우, 각 컨트롤의 바인딩 경로를 설정한 다음 모든 컨트롤을 포함하는 가장 낮은 레벨의 부모 요소에 Bind()를 호출합니다. Bind()는 바인딩 경로가 있는 경우 호출되는 요소에 바인딩하고 바인딩 경로를 갖는 모든 자식 요소를 재귀적으로 바인딩합니다. 성능에 부정적인 영향을 미치기 않도록 시각적 요소를 Bind() 메서드로 두 번 이상 바인딩하지 마십시오.

바인딩 예제

다음 예제를 통해 데이터 바인딩을 사용하여 코딩하는 방법을 알아보십시오.

추가 리소스

SerializedObject 데이터 바인딩
바인드 가능 요소 레퍼런스