Unity 검색

검색 기능 최신 업데이트: Unity 2021.2

2022년 1월 19일 엔진 & 플랫폼 | 9 분 소요
3 spheres on black background
3 spheres on black background
공유

Is this article helpful for you?

Thank you for your feedback!

지난 해에는 검색 기능에 큰 변화가 있었습니다. 이름으로 Unity 오브젝트를 검색하게 해주는 Quick Search 패키지와 구체적인 기준을 통해 검색을 저장하거나 항목을 검토하고, LINQ와 유사한 언어로 복잡한 쿼리를 생성할 수 있는 Core Search 워크플로를 소개했습니다.

버전 2021.1에서 처음으로 출시된 검색 기능은 이제 Unity 사용자를 위한 핵심 워크플로가 되었습니다. 실제로 에디터 내에 내장되어 있으므로 패키지를 수동으로 설치할 필요가 없습니다.

문자를 입력한 후 반환되는 오브젝트를 이용하거나 더 복잡한 쿼리를 생성하는 등의 방식으로 이 툴을 효과적으로 사용할 수 있습니다. Unity 2021.2에 포함된 최신 버전의 검색 기능은 몇 가지 주요 개선 사항이 추가되어 생산성을 유지할 수 있도록 도움을 줍니다. 아래 내용에서 변경 사항을 살펴보세요.

* 2020.3에서 사용할 수 있는 Quick Search 패키지는 실험적 프리뷰 버전으로, 대부분의 기능이 코어 버전과 동일합니다. 최신 프리뷰 패키지를 설치하려면 Project Settings에서 Preview Packages를 활성화해야 합니다.

인덱싱 성능 개선

에셋 인덱싱 시스템의 성능이 전보다 강력해졌습니다. 초기 인덱싱에 필요한 시간과 공간이 줄어들었으며, Index Manager (Window > Search > Index Manager)에서 기본 인덱스를 살짝 수정하여 인덱싱되는 데이터의 양을 늘릴 수 있습니다.

Unity Search indexing

위와 같이 PropertiesDependencies에 대한 인덱싱을 추가하면 새로운 검색 피커와 테이블 워크플로를 최대한 활용할 수 있습니다.

검색 저장 구성

다음으로 살펴볼 핵심 개선 사항은 뛰어난 성능을 자랑하는 검색 저장 워크플로입니다. 지루하게 같은 쿼리를 반복하여 입력할 필요가 없도록 검색 저장을 위한 새로운 오거나이저가 추가되었습니다.

Unity saved search organization

다음과 같이 새로운 옵션이 제공됩니다. 사용자 환경 설정에 저장되는 User Searches는 해당 사용자에게만 적용되는 반면, 프로젝트의 에셋으로 저장되는 Project Searches는 모든 프로젝트 관계자가 공유합니다. 아이콘을 검색에 바인딩하여 새로운 Search 창에서 검색을 열 수 있습니다. Search 창의 전체 상태가 사용자의 검색을 저장하며, 쿼리 텍스트와 아이콘 크기(특히 테이블 레이아웃의 아이콘), 선택한 검색 탭이 항상 복원됩니다.

검색 테이블 뷰

검색 창에서는 아래와 같이 Compact List 뷰, Big List 뷰 또는 여러 크기의 그리드 아이콘 등 다양한 방법으로 오브젝트를 시각화할 수 있습니다.

Unity 2021.2에서는 쿼리의 결과 항목을 테이블 뷰로 시각화할 수 있습니다.

이는 이름이나 설명으로 항목을 정렬하는 데 유용합니다. 또한 다음과 같이 열 레이아웃을 생성할 때 검색 표현식을 사용하여 검색 항목에서 편리하게 프로퍼티를 추출할 수 있습니다.

열 레이아웃을 저장할 수 없다면 시간을 들여 설정할 필요가 없습니다. 앞서 말씀드린대로 열 레이아웃 등 검색 창의 전체 상태는 저장됩니다. 고유의 데이터 탐색기를 만들어 여러 프로퍼티 값을 서로 비교하고 대조할 수도 있습니다.

테이블 열의 레이아웃이 설정되면 Save 아이콘을 사용하여 모든 정보를 CSV 또는 JSON 파일에 저장하고 상세 보고서를 생성할 수 있습니다. 이렇게 하면 보다 편리하게 동일한 프로젝트의 여러 버전을 검토하고 비교할 수 있습니다.

검색 피커

이번 기능은 많은 고급 Unity 사용자들의 마음을 사로잡을 거라 예상합니다. 이제 기존 오브젝트 피커 대신 검색 창을 사용하여 Unity에서 에셋이나 게임 오브젝트를 비롯한 모든 오브젝트를 보다 정밀하게 선택할 수 있습니다. 이러한 방식을 사용하면 코드를 통해 특정 스크립트 프로퍼티가 결정되는 방식을 정의할 수 있습니다.

[SearchContextAttribute]를 사용하면 오브젝트 레퍼런스 프로퍼티를 데코레이트할 수 있습니다. 쿼리의 SearchProvider와 더 제한된 초기 쿼리 또는 SearchViewFlags를 선택하기만 하면 검색 피커의 형태를 변경할 수 있습니다.

위 사양은 다음과 같은 형태로 나타납니다.

검색 피커 뷰에서 초기 쿼리가 설정된 방식과 아이콘 그리드 표시를 확인해보세요.

검색 표현식

마지막으로 이야기할 사항은 새로 추가된 검색 표현식입니다. 검색 표현식을 활용하면 쿼리 언어를 더 강력하고 커스터마이징 가능하도록 확장할 수 있습니다. 검색 표현식은 실제로 어떻게 도움이 될까요?

  • 여러 검색 공급자를 교차 참조하거나 여러 쿼리를 동시에 실행할 수 있는 단문 쿼리를 표현합니다.
    • 즉, 현재 씬에서 컴파일하지 않는 셰이더를 참조하는 모든 오브젝트를 표시할 수 있습니다.
  • 쿼리에서 산출된 항목에 변환 및 필터링을 적용합니다. S-Expression 구문의 경우 LINQ와 SQL, Lisp가 모두 합쳐진 모습입니다.
    • sort{count{...groupby{a:assets, @type}}, @value, desc}
    • select{t:LODGroup, @lodsize}
  • 검색 테이블 워크플로와 함께 사용하여 프로젝트에 복잡한 쿼리를 실행하고 이 정보를 테이블 형식으로 표시합니다. 검색 표현식은 지속적 통합(CI) 또는 검증(Validation) 시스템의 기반으로 사용할 수 있습니다.

다음은 다양한 검색 표현식 구문 중 사용자가 마주칠 수 있는 몇 가지 쿼리 유형입니다.

이름이 'rock'인 텍스처를 참조하는 프리팹 모두 찾기:

t:prefab ref={t:texture rock}

이는 시스템이 쿼리 t:texture rock을 실행한다는 의미입니다. 그런 다음 모든 텍스처에 대해 t:prefab ref= 쿼리가 실행됩니다. 실행된 쿼리의 결과가 집계되어 최종 결과를 표시합니다.

프로젝트에서 고유한 에셋 유형의 수 확인하기:

count{t={distinct{select{a:assets, @type}}}}

프로젝트에서 모든 LODGroup 에셋의 평균 LODSize 계산하기:

avg{select{t:LODGroup, @lodsize}}

중괄호가 보이면 검색 표현식을 떠올려 보세요. 그런 다음 항목 스트림의 프로세서로 avg, select, distinct 평가자를 고려하세요. 평가가 Unity의 백그라운드에서 실행되는 스레드에서 이루어지므로, 실행해야 하는 쿼리의 복잡도나 수와 관계없이 검색 창은 반응성을 최대한 유지합니다.

아울러 검색 쿼리를 사용하면 긴 검색 표현식을 저장할 수 있으므로 전체 구문을 다시 입력하지 않아도 간편하게 실행할 수 있습니다.

피드백 및 추가 정보

지금까지 소개한 워크플로는 공식 Unity 에디터 기술 자료에서도 보실 수 있습니다.

또한 다양한 쿼리 예제와 검색 생태계에 따른 일부 프로토타이핑 툴이 공개 GitHub 리포지토리에 정리되어 있습니다. 

유니티 Wiki에서도 뛰어난 검색 워크플로에 관한 문서와 복잡한 검색 표현식을 상세하게 풀어 설명하는 섹션을 확인할 수 있습니다.

쿼리 예제 페이지에서 2022.1에 출시될 검색의 새 기능을 미리 살펴볼 수 있습니다.

Unity 2022.1에서 선보일 새로운 기능을 자세히 알아보려면 베타 출시 블로그 포스팅을 확인해 보세요.

2022년 1월 19일 엔진 & 플랫폼 | 9 분 소요

Is this article helpful for you?

Thank you for your feedback!