타입 컨버터를 사용하여 데이터 소스와__ UI__(사용자 인터페이스) 사용자가 애플리케이션과 상호 작용하도록 해 줍니다. Unity는 현재 3개의 UI 시스템을 지원합니다. 자세한 정보
See in Glossary 간의 데이터 유형을 전환할 수 있습니다. 다음과 같이 허용됩니다.
int 값에서 Texture2D 프로퍼티에 바인딩).타입 컨버터에는 두 가지 카테고리, 즉 전역 컨버터와 바인딩당 컨버터가 있습니다.
전역 컨버터는 정적으로 등록되며 바인딩 모드와 관계없이 모든 바인딩 인스턴스에서 사용할 수 있습니다. 바인딩 시스템은 스타일 값과 기본 데이터 표현 간의 컨버터와 같이 편의를 위해 미리 등록된 여러 전역 컨버터를 제공합니다. 데이터 소스에서 StyleFloat를 사용하는 대신 일반 float 또는 StyleKeyword를 StyleFloat 프로퍼티에 바인딩하는 데 사용할 수 있습니다.
전역 컨버터를 등록하려면 ConverterGroups.RegisterGlobalConverter 메서드를 사용합니다. 이 메서드를 사용하려면 델리게이트가 소스 유형을 대상 유형으로 전환해야 합니다. 양방향 사용을 활성화하려면 델리게이트가 ref 델리게이트여야 합니다. 등록되면 전역 컨버터는 추가 구성 없이 해당 전환 타입이 필요한 모든 바인딩 인스턴스에 자동으로 적용됩니다.
다음 예제는 Texture2D와 TextureHandle 간에 전환되는 전역 컨버터를 등록합니다.
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 유형이 아닌 한 완벽하게 일치해야 합니다. 예를 들어, int를 float로, 또는 float를 int로 변환할 수 없습니다. 이는 특히 enum 유형에서 불편할 수 있습니다. 이 제한은 향후 릴리스에서 해결될 예정입니다.