버전:2021.3+
이 예제에서는 커스텀 인스펙터, 커스텀 에디터, 직렬화된 오브젝트 간에 바인딩을 생성하는 방법을 보여줍니다.
이 예제에서는 다음을 생성합니다.
InspectorElement 안에 동일한 바인딩을 생성하는 커스텀 에디터 창
이 예제에서 생성한 완성된 파일은 GitHub 저장소에서 확인할 수 있습니다.
이 가이드는 Unity 에디터, UI 툴킷, C# 스크립팅에 익숙한 개발자용입니다.시작하기 전에 먼저 다음을 숙지하십시오.
TankScript라는 커스텀 인스펙터 UI 클래스를 정의하고 USS로 스타일을 지정한 다음 시각적 요소와 바인딩 경로를 UXML로 설정합니다.
프로젝트(Project) 창에서 모든 파일을 저장할 폴더를 ’create-a-binding-inspector’라는 이름으로 만듭니다.
TankScript.cs라는 이름의 C# 스크립트를 생성하고 콘텐츠를 다음과 같이 바꿉니다.
using UnityEngine;
[ExecuteInEditMode]
public class TankScript :MonoBehaviour
{
public string tankName = "Tank";
public float tankSize = 1;
private void Update()
{
gameObject.name = tankName;
gameObject.transform.localScale = new Vector3(tankSize, tankSize, tankSize);
}
}
create-a-binding-inspector 폴더에서 ’Editor’라는 이름의 폴더를 만듭니다.
Editor 폴더에 tank_inspector_styles.uss라는 이름의 USS 파일을 생성하고 콘텐츠를 다음으로 바꿉니다.
.container {
background-color: rgb(80, 80, 80);
flex-direction: column;
}
Label {
background-color: rgb(80, 80, 80);
}
TextField:hover {
background-color: rgb(255, 255, 0);
}
FloatField {
background-color: rgb(0, 0, 255);
}
tank_inspector_uxml.uxml이라는 이름의 UXML 파일을 생성하고 해당 콘텐츠를 다음과 같이 바꿉니다.
<UXML xmlns="UnityEngine.UIElements" xmlns:ue="UnityEditor.UIElements">
<Style src="tank_inspector_styles.uss" />
<VisualElement name="row" class="container">
<Label text="Tank Script - Custom Inspector" />
<ue:PropertyField binding-path="tankName" name="tank-name-field" />
<ue:PropertyField binding-path="tankSize" name="tank-size-field" />
</VisualElement>
</UXML>
C# 스크립트를 생성하여 TankScript에 대한 커스텀 인스펙터를 등록합니다.인스펙터 창에서 바인딩은 암시적이므로 Bind() 메서드를 호출하지 않아도 됩니다.
TankEditor.cs라는 이름의 C# 스크립트를 생성하고 해당 콘텐츠를 다음과 같이 바꿉니다.
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
[CustomEditor(typeof(TankScript))]
public class TankEditor :Editor
{
[SerializeField]
VisualTreeAsset visualTree;
public override VisualElement CreateInspectorGUI()
{
var uxmlVE = visualTree.CloneTree();
return uxmlVE;
}
}
프로젝트 창에서 TankEditor.cs를 선택합니다.
인스펙터에서 tank_inspector_uxml.uxml을 Visual Tree로 드래그합니다.
tank_inspector_styles.uss를 인스펙터의 Style Sheet로 드래그합니다.
TankScript.cs를 인스펙터의 Add Component로 드래그합니다.그러면 인스펙터에 Tank Script 컴포넌트가 생깁니다.InspectorElement로 바인딩TankScript 오브젝트에 바인딩하는 두 개의 필드가 있는 커스텀 에디터 창을 만듭니다.InspectorElement 생성자를 호출하는 C# 스크립트를 생성합니다.InspectorElement는 UI를 생성하고 해당 UI를 오브젝트에 자동으로 바인딩합니다.
SimpleBindingExampleInspectorElement.cs라는 이름의 C# 파일을 생성하고 해당 콘텐츠를 다음과 같이 바꿉니다.
using UnityEditor;
using UnityEngine;
using UnityEditor.UIElements;
namespace UIToolkitExamples
{
public class SimpleBindingExampleInspectorElement :EditorWindow
{
[MenuItem("Window/UIToolkitExamples/Simple Binding Example Inspector Element")]
public static void ShowDefaultWindow()
{
var wnd = GetWindow<SimpleBindingExampleInspectorElement>();
wnd.titleContent = new GUIContent("Simple Binding with Inspector Element");
}
TankScript m_Tank;
public void OnEnable()
{
m_Tank = FindObjectOfType<TankScript>();
if (m_Tank == null)
return;
var inspector = new InspectorElement(m_Tank);
rootVisualElement.Add(inspector);
}
}
}