Unity 사용자 매뉴얼: UI 툴킷과 리스트 바인딩
이 문서는 Unity에서 UI 툴킷을 사용하여 리스트를 바인딩하는 방법에 대해 설명합니다. 리스트를 효율적으로 처리하기 위해 ListView
컨트롤을 이용하는 방법을 배울 것입니다.
개요
이 가이드는 GameSwitch
객체의 리스트를 생성하고 이 리스트를 UI에 바인딩하는 방법을 단계별로 안내합니다. 최종 결과물은 GitHub 저장소에서 확인할 수 있습니다.
전제 조건
- Unity 에디터 사용에 익숙한 개발자
- UI 툴킷 및 C# 스크립팅에 대한 이해
시작하기
- 새 Unity 프로젝트 생성
- 임의의 템플릿으로 프로젝트를 시작합니다.
- 프로젝트 창에서 'bind-to-list'라는 폴더를 만듭니다.
- C# 스크립트 생성
GameSwitch.cs
라는 이름의 C# 스크립트를 생성하고 다음 내용을 추가합니다.
```csharp using System;
[Serializable] public struct GameSwitch { public string name; public bool enabled; } ```
- UI 문서 생성
Game_switch.uxml
이라는 이름의 UI 문서를 생성하고 다음 내용을 추가합니다.
xml <UXML xmlns="UnityEngine.UIElements" xmlns:ue="UnityEditor.UIElements"> <Box style="flex-direction: row;"> <Toggle binding-path="enabled" /> <TextField binding-path="name" readonly="true" style="flex-grow:1;"/> </Box> </UXML>
- GameSwitchListAsset 스크립트 작성
GameSwitchListAsset.cs
라는 이름의 C# 스크립트를 만들고 다음 내용을 추가합니다.
```csharp using System.Collections.Generic; using UnityEngine;
namespace UIToolkitExamples { [CreateAssetMenu(menuName = "UIToolkitExamples/GameSwitchList")] public class GameSwitchListAsset : ScriptableObject { public List switches;
public void Reset()
{
switches = new()
{
new() { name = "Use Local Server", enabled = false },
new() { name = "Show Debug Menu", enabled = false },
new() { name = "Show FPS Counter", enabled = true },
};
}
public bool IsSwitchEnabled(string switchName) => switches.Find(s => s.name == switchName).enabled;
}
} ```
커스텀 에디터 생성
- 커스텀 에디터 스크립트 작성
Editor
라는 이름의 폴더를 생성합니다.GameSwitchListEditor.cs
라는 이름의 C# 스크립트를 생성하고 다음 내용을 추가합니다.
```csharp using UnityEditor; using UnityEngine; using UnityEngine.UIElements;
namespace UIToolkitExamples { [CustomEditor(typeof(GameSwitchListAsset))] public class GameSwitchListEditor : Editor { [SerializeField] VisualTreeAsset m_ItemAsset;
[SerializeField]
VisualTreeAsset m_EditorAsset;
public override VisualElement CreateInspectorGUI()
{
var root = m_EditorAsset.CloneTree();
var listView = root.Q<ListView>();
listView.makeItem = m_ItemAsset.CloneTree;
return root;
}
}
} ```
- UI 문서 추가
game_switch_list_editor.uxml
라는 이름의 UI 문서를 생성하고 다음 내용을 추가합니다.
xml <UXML xmlns="UnityEngine.UIElements" xmlns:ue="UnityEditor.UIElements"> <ListView virtualization-method="DynamicHeight" reorder-mode="Animated" binding-path="switches" show-add-remove-footer="true" show-border="true" show-foldout-header="true" header-title="Switches"/> </UXML>
- 바인딩 확인
- 프로젝트 창에서
GameSwitchListEditor.cs
를 선택하고game_switch.uxml
을 인스펙터의 Item Asset으로 드래그합니다. game_switch_list_editor.uxml
을 인스펙터의 Editor Asset으로 드래그합니다.
바인딩 테스트
- 새 에셋 생성
- 메뉴에서
Assets > Create > UIToolkitExamples > GameSwitchList
를 선택합니다. - 생성된
New Game Switch List Asset
을 프로젝트 창에서 선택합니다. - 리스트 조작
- 인스펙터에서 토글 리스트를 조작하며 리스트 항목의 순서를 변경하고, 항목을 추가/제거할 수 있습니다.
추가 리소스
주제 | 설명 |
---|---|
SerializedObject 데이터 바인딩 | Unity에서 데이터 바인딩의 기본 개념을 설명합니다. |
바인딩 가능한 요소 | UI 툴킷에서 바인딩이 가능한 다양한 요소들을 소개합니다. |
바인딩 데이터 타입 전환 | 서로 다른 데이터 타입 간의 바인딩 방법을 다룹니다. |
구현 세부 정보 | 바인딩 구현에 필요한 상세 기술들을 설명합니다. |
Unity는 강력한 비주얼 시스템과 스크립트를 통해 다양한 UI 요소를 쉽게 관리할 수 있는 환경을 제공하므로, 개발자들은 이러한 도구들을 활용하여 자신의 프로젝트에 적합한 솔루션을 만들 수 있습니다.