Version: Unity 6.0 (6000.0)
언어 : 한국어
USS 선택자를 바인드하는 커스텀 바인딩 생성
SerializedObject 데이터 바인딩

ListView를 런타임 바인딩이 적용된 목록에 바인딩

버전: 6000+

ListView 컨트롤은 목록을 생성하는 가장 효율적인 방법입니다. 이 예시는 런타임 바인딩을 사용하여 ListView를 목록에 바인딩하는 방법을 보여 줍니다. 런타임 바인딩은 런타임과 에디터 UI를 모두 지원합니다. 이 예시에서는 데모 목적으로 에디터 창에 ListView를 표시합니다.

개요 예시

이 예시에서는 ListView와 목록을 생성합니다. ListView를 목록에 바인딩하려면 ListView의 바인딩 데이터 소스를 목록이 포함된 프로퍼티로 설정합니다.

이 예제에서 완성된 파일은 이 GitHub 저장소에서 찾을 수 있습니다.

선행 조건

이 가이드는 Unity 에디터, UI 툴킷, C# 스크립팅에 익숙한 개발자를 위한 가이드입니다. 시작하기 전에 먼저 다음을 숙지하십시오.

목록이 있는 오브젝트 만들기

Item 오브젝트 목록이 있는 예시 List 오브젝트를 만듭니다. 각 Item에는 nameenabled 프로퍼티가 포함되어 있습니다.

  1. 임의의 템플릿을 사용하여 Unity 프로젝트를 생성합니다.
  2. 프로젝트 창에서 모든 파일을 저장할 runtime-binding-listview라는 폴더를 만듭니다.
  3. runtime-binding-listview 폴더에 Scripts라는 이름의 폴더를 만들어 모든 C# 스크립트를 저장합니다.
  4. Scripts 폴더에 다음 내용을 포함하는 ExampleItemObject.cs라는 이름의 C# 스크립트를 생성합니다.
   using System;
   using System.Collections.Generic;
   using UnityEngine;
   
   public class ExampleItemObject  
   {
       public List<Item> items = new();
   
       public void Reset()
       {
           items = new List<Item>{
               new() { name = "Use Local Server", enabled = false },
               new() { name = "Show Debug Menu", enabled = false },
               new() { name = "Show FPS Counter", enabled = true },
           };
       }
   
       public struct Item
       {
           public bool enabled;
           public string name;
       }
   }

UI 빌더에서 ListView 항목 템플릿 생성

UI 빌더에서 목록 항목의 템플릿을 생성합니다. 각 항목에는 Toggle과 TextField가 포함됩니다. 이를 Item 오브젝트의 enabledname 프로퍼티에 바인딩합니다.

  1. runtime-binding-listview 폴더에 UXML이라는 이름의 폴더를 만듭니다.

  2. UXML 폴더에 ListViewItem.uxml이라는 이름의 UXML 파일을 만듭니다.

  3. ListViewItem.uxml 파일을 더블 클릭하여__ UI__(사용자 인터페이스) 사용자가 애플리케이션과 상호 작용하도록 해 줍니다. Unity는 현재 3개의 UI 시스템을 지원합니다. 자세한 정보
    See in Glossary
    빌더에서 엽니다.

  4. 계층 구조 패널에서 VisualElement를 추가합니다.

  5. VisualElement의 자식으로 Toggle을 추가합니다.

  6. TextFieldVisualElement 자식으로 추가합니다.

  7. ToggleTextField에 대한 레이블 텍스트를 제거합니다.

  8. VisualElementFlex directionRow로 설정합니다.

  9. Toggle인스펙터 패널에서 다음을 수행합니다.

  10. Value를 오른쪽 클릭하고 Add binding을 선택합니다.

  11. Add Binding 창에서 Data Source Pathenabled로 설정합니다.

  12. TextField인스펙터 패널에서 다음을 수행합니다.

    • Value를 오른쪽 클릭하고 Add binding을 선택합니다.
    • Add Binding 창에서 Data Source Pathname로 설정합니다.
  13. UXML 파일을 저장합니다. 완료된 UXML 파일은 다음과 같습니다.

   <ui:UXML xmlns:ui="UnityEngine.UIElements">
       <ui:VisualElement name="VisualElement" style="flex-direction: row;">
           <ui:Toggle>
               <Bindings>
                   <ui:DataBinding property="value" data-source-path="enabled"  />
               </Bindings>
           </ui:Toggle>
           <ui:TextField placeholder-text="filler text">
               <Bindings>
                   <ui:DataBinding property="value" data-source-path="name"  />
               </Bindings>
           </ui:TextField>
       </ui:VisualElement>
   </ui:UXML>

UI 빌더에서 ListView UI 만들기

UI 빌더에서 ListView UI를 만들고 항목 템플릿을 ListViewItem.uxml로 설정합니다.

  1. UXML 폴더에 UIListView.uxml이라는 이름의 UXML 파일을 만듭니다.

  2. UIListView.uxml 파일을 더블 클릭하여 UI 빌더에서 엽니다.

  3. 계층 구조 패널에서 ListView를 추가합니다.

  4. ListView인스펙터 패널에서 다음을 수행합니다.

  5. Virtualization MethodDynamic Height로 설정합니다.

  6. Reorder ModeAnimated로 설정합니다.

  7. Item TemplateListViewItem.uxml로 설정합니다.

  8. Binding Source Selection ModeAuto Assign으로 설정합니다.

  9. Reorderable 체크박스를 선택합니다.

  10. Show Add Remove Footer 체크박스를 선택합니다.

  11. Header TitleItems로 설정합니다.

  12. Show Foldout Header 체크박스를 선택합니다.

  13. UXML 파일을 저장합니다. 완료된 UXML 파일은 다음과 같습니다.

   <ui:UXML xmlns:ui="UnityEngine.UIElements">
       <ui:ListView binding-source-selection-mode="AutoAssign" item-template="ListViewItem.uxml" />
   </ui:UXML>

커스텀 에디터 창을 만들고 바인딩 설정

ListView가 포함된 커스텀 에디터 창을 만들고 Listitems 프로퍼티에 바인딩합니다. 이 예시는 C# 스크립트에서 바인딩 소스를 설정합니다. 다음과 같이 ListView 요소 내에서 UXML 파일의 바인딩 소스를 수동으로 설정할 수도 있습니다.

<ui:ListView>
    <Bindings>
        <ui:DataBinding property="itemsSource" data-source-path="items" />
    </Bindings>
</ui:ListView>
  1. Scripts 폴더에 Editor이라는 이름의 폴더를 만듭니다.
  2. Editor 폴더에 다음 내용을 포함하는 ListViewTestWindow.cs라는 이름의 C# 스크립트를 생성합니다.
   using UnityEngine;
   using UnityEngine.UIElements;
   using UnityEditor;
   using UnityEditor.UIElements;
   using System.Collections.Generic;
   using Unity.Properties;
   
   internal class ListViewTestWindow : EditorWindow
   {
       // This example sets the itemTemplate and bindingSourceSelectionMode in the UXML file.
       // If you want to set them in the C# script, declare an itemLayout field of type VisualTreeAsset
       // and then set the "Item Layout" to "ListViewItem.uxml" in the Inspector window.
       //[SerializeField] private VisualTreeAsset itemLayout;
       [SerializeField] private VisualTreeAsset editorLayout;
   
       ExampleItemObject m_ExampleItemObject;
       
       [MenuItem("Window/ListViewTestWindow")]
       static void Init()
       {
           ListViewTestWindow window = EditorWindow.GetWindow<ListViewTestWindow>();
           window.Show();
       }
   
       void CreateGUI()
       {
           m_ExampleItemObject = new();
   
           editorLayout.CloneTree(rootVisualElement);
           var listView = rootVisualElement.Q<ListView>();
           
           // This example sets the itemTemplate and bindingSourceSelectionMode in the UXML file.
           // You can also set them in the C# script like the following:
           // listView.itemTemplate = itemLayout;
           // listView.bindingSourceSelectionMode = BindingSourceSelectionMode.AutoAssign;
   
           // Set the binding source to the ExampleItemObject instance.
           listView.dataSource = m_ExampleItemObject;
   
           // Set the itemsSource binding to the items property of the List object.
           // You can also set the itemsSource binding manually in the UXML file and comment out this line. 
           // Refer to the next section for how to set binding in UXML.
           listView.SetBinding("itemsSource", new DataBinding() {dataSourcePath = new PropertyPath("items")});
           
           m_ExampleItemObject.Reset();
       }
   }
   

바인딩 테스트

  • 메뉴에서 Window > ListViewTestWindow를 선택합니다.

에디터 창에는 ExampleItemObject.cs에 정의된 항목에 바인딩된 ListView가 표시됩니다. ExampleItemObject.csItem에 대한 enabled 또는 name 프로퍼티 값을 업데이트하면 변경 사항이 ListView에 자동으로 반영됩니다.

추가 리소스

USS 선택자를 바인드하는 커스텀 바인딩 생성
SerializedObject 데이터 바인딩
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961