52 lines
1.6 KiB
C#
52 lines
1.6 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UIElements;
|
|
using System;
|
|
|
|
// MonoBehaviour를 상속받아 uGUI 시스템과 함께 동작합니다
|
|
[RequireComponent(typeof(UIDocument))]
|
|
public class LibraryViewController : MonoBehaviour
|
|
{
|
|
// 드래그 상태 외부 알림용 이벤트
|
|
public event Action<bool> OnDragStateChanged;
|
|
|
|
private VisualElement rootElement;
|
|
private ScrollView itemScrollView;
|
|
|
|
void Awake()
|
|
{
|
|
// 1. 같은 게임오브젝트에 있는 UIDocument에서 root VisualElement를 가져옵니다.
|
|
var uiDocument = GetComponent<UIDocument>();
|
|
rootElement = uiDocument.rootVisualElement;
|
|
|
|
// 2. UXML에 정의된 주요 요소들을 찾습니다.
|
|
itemScrollView = rootElement.Q<ScrollView>("item-scroll-view");
|
|
|
|
// 3. 라이브러리 데이터 로딩 및 UI 생성을 호출합니다.
|
|
LoadAndDisplayLibrary();
|
|
|
|
// 4. 드래그 로직을 담당할 Manipulator를 등록하고, OnDragStateChanged 이벤트를 발생시킵니다.
|
|
// 이 부분은 이전 답변의 LibraryView 내부 로직과 동일합니다.
|
|
}
|
|
|
|
// uGUI 버튼 등 외부에서 이 메서드를 호출하여 이벤트를 연결할 수 있습니다.
|
|
public void ConnectToCamera(Action<bool> cameraControlAction)
|
|
{
|
|
OnDragStateChanged += cameraControlAction;
|
|
}
|
|
|
|
private void LoadAndDisplayLibrary()
|
|
{
|
|
// TODO: 라이브러리 데이터를 불러옵니다.
|
|
// var libraryData = ...
|
|
|
|
// TODO: 데이터를 기반으로 아이템 VisualElement를 생성하여 itemScrollView에 추가합니다.
|
|
// 예: foreach (var itemData in libraryData) { itemScrollView.Add(new LibraryItem(itemData)); }
|
|
}
|
|
|
|
void OnDestroy()
|
|
{
|
|
// 이벤트 구독 해제
|
|
// OnDragStateChanged -= ...
|
|
}
|
|
}
|