프로퍼티 방문자는 Properties API 위에 빌드된 알고리즘입니다.
직접 수정하지 않고 방문자를 사용하여 유형에 기능을 추가할 수 있습니다. 매우 일반적인 방문자를 생성하여 알고리즘 자체와 방문 프로세스를 모두 제어할 수 있습니다. 이는 일반적으로 미리 알려진 유형의 구조에서 방문이 발생하는 방문자 패턴의 기존 구현과는 다릅니다. 직렬화, 인스펙터와 유사한__ UI__(사용자 인터페이스) 사용자가 애플리케이션과 상호 작용하도록 해 줍니다. Unity는 현재 3개의 UI 시스템을 지원합니다. 자세한 정보
See in Glossary 생성 등의 기능을 지원합니다.
다음은 방문자의 기본 패턴입니다. 이는 프로퍼티 백과 프로퍼티 컴패니언 오브젝트에서 발생합니다.
다음 방식을 통해 프로퍼티를 가져오는 방문자를 생성할 수 있습니다.
Unity.Properties.PropertyVisitor 기본 클래스를 사용합니다. PropertyVisitor를 사용하여 프로퍼티 방문자 생성에서 예시를 참조하십시오.IPropertyBagVisitor 및 IPropertyVisitor 인터페이스를 구현합니다. 저수준 API를 사용하여 프로퍼티 방문자 생성에서 예시를 참조하십시오.첫 번째 방식은 가장 쉬운 방법입니다. 하지만 프로퍼티 백과 프로퍼티 모두에 대한 방문 동작을 더 광범위하게 커스터마이즈하려면 유연성이 더 뛰어나고 성능 개선 가능성이 있는 두 번째 방식을 사용하십시오.
다음 예시에서는 PropertyVisitor 클래스를 사용하여 특정 속성으로 태그가 지정된 특정 유형의 프로퍼티를 가져오는 간단한 방문자를 생성합니다.
public class BindableAttribute
: Attribute
{
}
public class GatherBindablePropertiesVisitor
: PropertyVisitor
{
public List<PropertyPath> BindableProperties { get; set; }
protected override void VisitProperty<TContainer, TValue>(Property<TContainer, TValue> property, ref TContainer container, ref TValue value)
{
if (property.HasAttribute<BindableAttribute>())
BindableProperties.Add(PropertyPath.AppendProperty(default, property));
}
}
다음은 IPropertyBagVisitor 인터페이스를 사용하여 방문자를 생성하는 동일한 예시입니다.
public class BindableAttribute
: Attribute
{
}
public class GatherBindablePropertiesVisitor
: IPropertyBagVisitor
{
public List<PropertyPath> BindableProperties { get; set; }
void IPropertyBagVisitor.Visit<TContainer>(IPropertyBag<TContainer> propertyBag, ref TContainer container)
{
// Loop through the properties of the container object.
foreach (var property in propertyBag.GetProperties(ref container))
{
if (property.HasAttribute<BindableAttribute>())
BindableProperties.Add(PropertyPath.AppendProperty(default, property));
}
}
}
저수준 방문자는 프로퍼티 백의 모든 프로퍼티를 반복해서 값을 추출할 필요가 없으므로 성능이 더 뛰어납니다. 저수준 방문자를 사용하여 프로퍼티 백에 속하지 않는 프로퍼티를 방문할 수도 있습니다.
프로퍼티 백, 프로퍼티, 방문자는 모두 일반적인 유형을 사용하여 구현되므로 최대한 강력하게 유형을 유지할 수 있으며, 대부분의 경우 방문 시 박싱 할당을 방지할 수 있습니다. 일반적인 유형을 사용하면 메서드가 처음 호출될 때 JIT 컴파일러가 특정 메서드의 IL을 생성한다는 장점이 있습니다. 이렇게 하면 오브젝트에서 처음으로 방문자가 수락될 때 실행 속도가 느려질 수 있습니다.