Version: Unity 6.0 (6000.0)
언어 : 한국어
바인딩 모드 정의 및 트리거 업데이트
로깅 수준 정의

데이터 유형 전환

타입 컨버터를 사용하여 데이터 소스와__ UI__(사용자 인터페이스) 사용자가 애플리케이션과 상호 작용하도록 해 줍니다. Unity는 현재 3개의 UI 시스템을 지원합니다. 자세한 정보
See in Glossary
간의 데이터 유형을 전환할 수 있습니다. 다음과 같이 허용됩니다.

  • UI와 다른 데이터 유형을 바인딩합니다(예: int 값에서 Texture2D 프로퍼티에 바인딩).
  • 데이터를 다르게 표시하려고 할 때 라디안 대신 각도를 각도 단위로 표시하는 등 UI와 동일한 데이터 유형을 전환합니다.

타입 컨버터에는 두 가지 카테고리, 즉 전역 컨버터와 바인딩당 컨버터가 있습니다.

전역 컨버터

전역 컨버터는 정적으로 등록되며 바인딩 모드와 관계없이 모든 바인딩 인스턴스에서 사용할 수 있습니다. 바인딩 시스템은 스타일 값과 기본 데이터 표현 간의 컨버터와 같이 편의를 위해 미리 등록된 여러 전역 컨버터를 제공합니다. 데이터 소스에서 StyleFloat를 사용하는 대신 일반 float 또는 StyleKeywordStyleFloat 프로퍼티에 바인딩하는 데 사용할 수 있습니다.

전역 컨버터를 등록하려면 ConverterGroups.RegisterGlobalConverter 메서드를 사용합니다. 이 메서드를 사용하려면 델리게이트가 소스 유형을 대상 유형으로 전환해야 합니다. 양방향 사용을 활성화하려면 델리게이트가 ref 델리게이트여야 합니다. 등록되면 전역 컨버터는 추가 구성 없이 해당 전환 타입이 필요한 모든 바인딩 인스턴스에 자동으로 적용됩니다.

다음 예제는 Texture2DTextureHandle 간에 전환되는 전역 컨버터를 등록합니다.

public struct TextureHandle
{
    public static Texture2D ResolveTexture(TextureHandle handle)
    {
        return /* Actual texture */; 
    } 
    
   public static FromTexture(Texture2D texture)
   {
        return new TextureHandle { handle = /* Compute handle */ }; 
   }

    public int handle;
}

// Registers the global converter
ConverterGroups.RegisterGlobalConverter((ref TextureHandle handle) => TextureHandle.ResolveTexture(handle));
ConverterGroups.RegisterGlobalConverter((ref Texture2D texture) => TextureHandle.FromTexture(texture));

바인딩당 컨버터

바인딩당 컨버터는 특정 바인딩 인스턴스에 적용됩니다. 개별 또는 바인딩당 컨버터 그룹을 등록할 수 있습니다.

개별 컨버터

개별 컨버터를 등록하려면 DataBinding.sourceToUiConverters.AddConverter 또는 DataBinding.uiToSourceConverters.AddConverter 메서드를 사용하십시오. 이러한 메서드는 델리게이트가 소스 유형을 대상 유형으로 전환해야 합니다. 양방향 사용을 활성화하려면 델리게이트가 ref 델리게이트여야 합니다.

다음 예시는 개별 컨버터를 등록하고 적용하여 바인딩 인스턴스의 라디안과 각도를 전환합니다.

var binding = new DataBinding();
binding.sourceToUiConverters.AddConverter((ref float radian) => Mathf.RadToDeg * radian);
binding.uiToSourceConverters.AddConverter((ref float degree) => Mathf.DegToRad * degree);

그룹 컨버터

컨버터 그룹을 등록하고 DataBinding 인스턴스에 적용하려면 ConverterGroup 클래스를 사용합니다.

다음 예시는 컨버터 그룹을 등록하는 방법을 보여 줍니다.

// Create a converter group
var group = new ConverterGroup("Inverters");

// Add converters to the converter group
group.AddConverter((ref int v) => -v);
group.AddConverter((ref float v) => -v);
group.AddConverter((ref double v) => -v);
// Register the converter group
ConverterGroups.RegisterConverterGroup(group);


// Add a converter to an existing converter group
if (ConverterGroups.TryGetConverterGroup("Inverters", out var group))
{
    group.AddConverter((ref short v) => -v);
}

컨버터 그룹 적용

컨버터 그룹을 등록한 후 바인딩 인스턴스에 적용할 수 있습니다. C#, UI 빌더 또는 UXML에서 바인딩 인스턴스에 컨버터 그룹을 적용할 수 있습니다.

C#에서 컨버터 그룹을 적용하려면 DataBinding.ApplyConverterGroupToUI 또는 DataBinding.ApplyConverterGroupToSource 메서드를 사용합니다. 이러한 메서드는 컨버터 그룹 이름을 파라미터로 사용합니다.

다음 예제는 C#의 바인딩 인스턴스에 컨버터 그룹 Inverters를 적용합니다.

var binding = new DataBinding();
if (ConverterGroups.TryGetConverterGroup("Inverters", out var group))
{
    binding.ApplyConverterGroupToUI(group);
    binding.ApplyConverterGroupToSource(group);
}

참고: 컨버터 그룹을 다른 컨버터 그룹에 적용하면 ‘발사 후 망각(fire-and-forget)’ 방식으로 작동합니다. 즉, 컨버터 그룹을 적용하면 추가적인 지속적 모니터링 또는 관리 없이 원하는 기능을 독립적으로 수행할 수 있습니다.

다음 예제는 UXML에서 바인딩에 컨버터 그룹 Inverters를 적용합니다.

<ui:DataBinding source-to-ui-converters="Inverters" ui-to-source-converters="Inverters" />

UI 빌더에서 컨버터 그룹을 적용하는 방법에 대한 자세한 내용은 런타임 바인딩 시작하기를 참조하십시오.

베스트 프랙티스

다음 팁과 베스트 프랙티스를 따라 성능을 최적화하십시오.

  • 메모리 할당 최소화: 가능하면 메모리를 할당하는 전환 델리게이트를 작성하지 마십시오(특히 enum 타입을 다루는 경우). 전환 중에 메모리를 할당하면 불필요한 오버헤드가 발생하고 성능에 영향을 미칠 수 있습니다. 대신 효율적이고 메모리 친화적인 전환 방식을 선택합니다.
  • 컨버터 효율 유지: 컨버터는 빠르고 효율적인 타입 변환을 수행하는 데 집중해야 합니다. 이로 인해 성능이 저하되고 불필요한 복잡성을 초래할 수 있으므로 컨버터 내에서 광범위한 작업이나 복잡한 작업을 수행하지 마십시오.
  • 데이터 소스에 타입 전환 통합: 바인딩당 전환에만 의존하는 것이 아니라 타입 전환을 데이터 소스에 직접 통합하는 것이 좋습니다. 데이터 소스 자체에서 전환을 처리하면 프로세스를 간소화하고 전반적인 성능을 향상시킬 수 있습니다. 이 접근 방식은 바인딩별로 전환을 관리하는 데 관련된 복잡성을 줄일 수도 있습니다.

알려진 제한 사항

소스 및 대상 유형은 UnityEngine.Object 유형이 아닌 한 완벽하게 일치해야 합니다. 예를 들어, intfloat로, 또는 floatint로 변환할 수 없습니다. 이는 특히 enum 유형에서 불편할 수 있습니다. 이 제한은 향후 릴리스에서 해결될 예정입니다.

추가 리소스

바인딩 모드 정의 및 트리거 업데이트
로깅 수준 정의
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961