484 words
2 minutes
UI Builder를 활용한 Inspector 제작 / UI Builderを使用したInspector制作

UI Builder를 활용한 Inspector 제작 / UI Builderを使用したInspector制作#

Editor 스크립팅보다 UI Builder가 더 좋은 선택지가 될 수 있음
EditorスクリプトよりUI Builderの方が良い選択肢となる可能性あり


문제점 / 問題点#

  • 스타일시트 관리의 어려움

  • スタイルシート管理の難しさ

  • 패턴화 되어있거나 재사용해야 하는 형식이 나오면 고민 필요 (디자인 시스템)

  • パターン化されていたり、再利用しなければならない形式が出てきたら、悩みの必要(デザインシステム)


해결법 / 解決法#

  • UI Toolkit 핵심은 웹개발 접근법

  • UI Toolkitの核心はウェブ開発アプローチ

  • uxml을 컴포넌트 단위로 쪼개서 재사용

  • uxmlをコンポーネント単位に分けて再使用


DefaultUss 예시 / DefaultUss例#

.unity-foldout__checkmark {
background-image: url("project://database/Assets/Scripts/Editor/Icons/Lock.png?fileID=2800000&guid=0589837adb4686a4183efa8cc07bde31&type=3#Lock");
}
Foldout > Toggle:checked .unity-foldout__checkmark {
background-image: url("project://database/Assets/Scripts/Editor/Icons/LockOpen.png?fileID=2800000&guid=7d185f72de3ccbe4f8fb6f9d9d1ff77e&type=3#LockOpen");
}
Toggle > VisualElement {
justify-content: flex-end;
}
.default-foldout {
background-color: rgb(4, 184, 238);
align-items: center;
-unity-font-definition: resource('Font/Editor/GalmuriMono9');
font-size: 14px;
color: rgb(255, 255, 255);
-unity-font-style: bold;
text-shadow: 35px 35px 0 rgba(0, 0, 0, 0.47);
display: flex;
justify-content: space-between;
}
Label {
color: rgb(230, 230, 230);
margin-right: 40px;
}

TurnManager_Inspector 예시 / TurnManager_Inspector例#

using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
[CustomEditor(typeof(TurnManager))]
public class TurnManager_Inspector : Editor
{
public VisualTreeAsset m_InspectorXML;
public override VisualElement CreateInspectorGUI()
{
// Create a new VisualElement to be the root of our inspector UI
VisualElement myInspector = new VisualElement();
// Load from default reference
m_InspectorXML.CloneTree(myInspector);
// Find the Foldout and Visual Elements
var foldout = myInspector.Q<Foldout>("myFoldout");
var visualElements = myInspector.Q<VisualElement>("myVisualElements");
// Set initial state to false
visualElements.style.display = DisplayStyle.None;
// Register callback for Foldout state change
foldout.RegisterValueChangedCallback(evt =>
{
visualElements.style.display = evt.newValue ? DisplayStyle.Flex : DisplayStyle.None;
});
// 버튼 가져오기 / ボタン取得
Button myButton = myInspector.Q<Button>("StartButton");
myButton.clicked += OnMyButtonClicked;
// Return the finished inspector UI
return myInspector;
}
public override bool UseDefaultMargins() => false;
private void OnMyButtonClicked() {
TurnManager myComponent = (TurnManager)target;
myComponent.StartGame();
}
}

핵심 포인트 / 重要ポイント

  • UI Builder를 사용하면 Inspector UI 제작이 편리하고 직관적
  • UI Builderを使用するとInspector UI制作が便利で直感的
  • UXML/USS를 재사용할 수 있으므로 디자인 시스템 구축 가능
  • UXML/USSを再利用できるのでデザインシステム構築が可能
UI Builder를 활용한 Inspector 제작 / UI Builderを使用したInspector制作
https://yuminjo.github.io/YuminJo-Blog/posts/uibuildereditorscripting/
Author
[Unity Developer] Yumin.Jo
Published at
2025-01-27
License
CC BY-NC-SA 4.0