버전:2021.3+
이 예제에서는 두 가지 속성을 가진 간단한 커스텀 컨트롤을 만드는 방법을 보여줍니다.
이 예제에서는 두 개의 속성을 가진 ’MyElement’라는 커스텀 컨트롤을 만들고 이를 UXML 및 UI 빌더에 노출합니다.이 예제에서는 UI 빌더에서 UI에 커스텀 컨트롤을 추가하는 방법도 보여줍니다.
이 예제에서 생성한 완성된 파일은 GitHub 저장소에서 확인할 수 있습니다.
이 가이드는 Unity, UI 툴킷, C# 스크립팅에 익숙한 개발자용입니다.시작하기 전에 먼저 다음을 숙지하십시오.
C#에서 새 커스텀 컨트롤 클래스를 만들려면 VisualElement
클래스에서 상속합니다.이렇게 하면 C#에서 이 요소를 생성하고 사용할 수 있지만 UXML 및 UI 빌더에 자동으로 노출되지는 않습니다.이를 노출하려면 UxmlTraits
에서 파생된 특성 클래스를 정의하고 Init()
를 재정의합니다.
임의의 템플릿을 사용하여 Unity 프로젝트를 생성합니다.
Assets
폴더에 다음 콘텐츠로 MyElement.cs
라는 이름의 C# 스크립트를 생성합니다.
using UnityEngine;
using UnityEngine.UIElements;
class MyElement :VisualElement
{
public new class UxmlFactory :UxmlFactory<MyElement, UxmlTraits> { }
// Add the two custom UXML attributes.
public new class UxmlTraits :VisualElement.UxmlTraits
{
UxmlStringAttributeDescription m_String =
new UxmlStringAttributeDescription { name = "my-string", defaultValue = "default_value" };
UxmlIntAttributeDescription m_Int =
new UxmlIntAttributeDescription { name = "my-int", defaultValue = 2 };
public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc)
{
base.Init(ve, bag, cc);
var ate = ve as MyElement;
ate.myString = m_String.GetValueFromBag(bag, cc);
ate.myInt = m_Int.GetValueFromBag(bag, cc);
}
}
// Must expose your element class to a { get; set; } property that has the same name
// as the name you set in your UXML attribute description with the camel case format
public string myString { get; set; }
public int myInt { get; set; }
}
원하는 이름으로 UXML 파일을 만듭니다.
UXML 파일을 더블 클릭하여 UI 빌더에서 엽니다.
UI 빌더의 Library 섹션에서 Project > Custom Controls (C#) > MyElement를 선택합니다.
MyElement를 계층 창으로 드래그합니다.
MyElement의 커스텀 속성을 확인하려면 MyElement의 인스펙터 창으로 이동합니다.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.