Unity 드래그 앤 드롭 UI 가이드
이 문서는 Unity에서 커스텀 에디터 창 내에 드래그 앤 드롭 UI를 만드는 방법에 대한 가이드를 제공합니다. UI 툴킷을 사용하여 이러한 UI 컴포넌트를 구현할 수 있습니다.
개요
드래그 앤 드롭은 UI 디자인에서 일반적으로 사용되는 기능으로, 이 기능을 커스텀 에디터 창이나 Unity 애플리케이션에서 사용할 수 있습니다. 본 예시에서는 여러 슬롯과 하나의 오브젝트를 커스텀 에디터 창에 추가하고, 오브젝트를 슬롯으로 드래그할 수 있는 기능을 구현할 것입니다.
준비 사항
이 가이드는 Unity 에디터, UI 툴킷 및 C# 스크립팅에 익숙한 개발자를 위해 작성되었습니다. 시작하기 전에 다음 내용을 숙지하십시오:
- UI 빌더
- 시각적 트리
- UXML
- USS
- 포인터 이벤트
커스텀 에디터 창 생성
- Unity에서 프로젝트를 생성합니다.
- Assets 폴더 내에 DragAndDrop이라는 폴더를 만들고 모든 파일을 저장합니다.
- DragAndDrop 폴더에서 마우스 오른쪽 버튼을 클릭하고
Create > UI Toolkit > Editor Window
를 선택합니다. - UI Toolkit Editor Window Creator에서
DragAndDropWindow
를 입력하고 Confirm을 클릭합니다.
이렇게 하면 커스텀 창에 대한 C# 스크립트, UXML, USS 파일이 자동 생성됩니다.
C# 스크립트 작성
DragAndDropWindow.cs
파일을 열고 아래와 같이 수정합니다:
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
public class DragAndDropWindow : EditorWindow
{
[MenuItem("Window/UI Toolkit/Drag And Drop")]
public static void ShowExample()
{
DragAndDropWindow wnd = GetWindow<DragAndDropWindow>();
wnd.titleContent = new GUIContent("Drag And Drop");
}
public void CreateGUI()
{
VisualElement root = rootVisualElement;
var visualTree = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/Drag and Drop/DragAndDropWindow.uxml");
VisualElement labelFromUXML = visualTree.Instantiate();
root.Add(labelFromUXML);
var styleSheet = AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/Drag and Drop/DragAndDropWindow.uss");
}
}
슬롯 및 오브젝트 생성
DragAndDropWindow.uxml
파일을 더블 클릭하여 UI 빌더를 엽니다.Add Existing USS
를 클릭하고DragAndDropWindow.uss
를 선택합니다.- 아래와 같은 VisualElement UI 컨트롤을 추가합니다:
슬롯 | 내용 |
---|---|
slots | slot_row1, slot_row2 |
slot_row1 | slot1, slot2 |
slot_row2 | slot1, slot2 |
object |
스타일링
slot1
과slot2
는 흰색 배경을 가지고 80픽셀 x 80픽셀의 정사각형입니다.object
는 검은색 배경을 가진 50픽셀 x 50픽셀의 둥근 점입니다.
<ui:UXML xmlns:ui="UnityEngine.UIElements">
<Style src="project://database/Assets/DragAndDrop/DragAndDropWindow.uss" />
<ui:VisualElement name="slots">
<ui:VisualElement name="slot_row1">
<ui:VisualElement name="slot1" />
<ui:VisualElement name="slot2" />
</ui:VisualElement>
<ui:VisualElement name="slot_row2">
<ui:VisualElement name="slot1" />
<ui:VisualElement name="slot2" />
</ui:VisualElement>
</ui:VisualElement>
<ui:VisualElement name="object" />
</ui:UXML>
스타일 시트 예시
.slot {
width: 80px;
height: 80px;
margin: 5px;
background-color: rgb(255, 255, 255);
border-top-radius: 10px;
}
.object {
width: 50px;
height: 50px;
position: absolute;
left: 10px;
top: 10px;
border-radius: 30px;
background-color: rgb(0, 0, 0);
}
드래그 앤 드롭 로직 정의
드래그 앤 드롭 기능을 구현하기 위해 DragAndDropManipulator.cs
파일을 다음과 같이 만들고 작성합니다:
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
public class DragAndDropManipulator : PointerManipulator
{
// Constructor, Callback Registration, Event Handlers
// Logic for handling pointer events during drag operations.
private Vector2 targetStartPosition { get; set; }
private Vector3 pointerStartPosition { get; set; }
private bool enabled { get; set; }
private VisualElement root { get; }
// Event handling methods omitted for brevity.
}
드래그 앤 드롭 활성화
커스텀 창이 열릴 때 드래그 앤 드롭을 활성화하려면 CreateGUI()
메서드에 다음을 추가합니다:
DragAndDropManipulator manipulator = new(rootVisualElement.Q<VisualElement>("object"));
이제 메뉴 바에서 Window > UI Toolkit > Drag And Drop
을 선택하여 커스텀 에디터 창을 열면 오브젝트를 슬롯에 드래그할 수 있습니다.
추가 리소스
이 문서에서 다룬 내용을 통해 Unity에서 드래그 앤 드롭 UI를 적절히 구현할 수 있습니다. 추가적인 질문이 있다면 Unity 공식 문서를 참조하거나 커뮤니티에 질문해 보세요.