Version: 2023.2
언어: 한국어
추가 검색 필터
함수 레퍼런스

검색 표현식

검색 표현식을 사용하면 검색 쿼리 언어를 추가하여 여러 제공자를 교차 참조하는 복잡한 쿼리(예: 씬에서 컴파일하지 않는 셰이더를 사용하는 모든 오브젝트 검색)를 표현할 수 있게 해줍니다.

검색 표현식을 연결하여 검색 항목에서 세트 조작을 수행하거나 변환할 수 있습니다.

검색 표현식 사용법

Search 창에 검색 표현식을 입력하여 결과를 반환합니다.

검색 표현식 생성

검색 표현식은 inner 표현식을 포함할 수 있는 root 표현식으로 시작합니다.

t:shader와 같은 단순한 쿼리는 표현식입니다. 이 표현식은 프로젝트의 셰이더에 상응하는 모든 검색 항목을 반환합니다.

검색 표현식 언어를 사용하여 여러 개의 쿼리를 하나의 표현식으로 합치고 더욱 유연하게 검색할 수 있습니다.

검색 표현식은 다음을 지원합니다. - 쿼리: t:shader - 중첩된 표현식이 있는 쿼리: t:prefab ref={t:texture} - 함수: count{t:shader} - 리터럴: 3 또는 "this is a string literal" - 프로퍼티 선택자: @path 또는 @mesh(@으로 시작하는 모든 식별자는 검색 항목에서 값을 추출하는 선택자로 간주됩니다. 선택자는 오브젝트의 프로퍼티를 찾을 수 있거나, 동적으로 결과를 계산하는 데 사용될 수 있습니다)

모든 검색 표현식은 검색 항목 세트를 반환합니다(IEnumerable<SearchItem>). 일반적으로 검색 표현식 언어에서는 중괄호 {}를 사용하여 항목 세트를 표기합니다. 3과 같은 리터럴 표현식도 내부적으로는 세트 {3}으로 평가됩니다.

다음과 같이 검색 표현식을 연결하여 더 복잡한 쿼리를 할 수 있습니다.

  • t:prefab ref={t:texture}
    • 쿼리의 t:texture 부분은 프로젝트의 모든 텍스처를 찾습니다.
    • 쿼리의 t:prefab ref= 부분은 t:texture 세트에 반환된 각 텍스처에 대해 쿼리를 실행하여 어떤 프리팹이 이 텍스처를 참조하는지 확인합니다.
  • t:prefab ref={t:texture size>4000}: 텍스처 크기가 4,000바이트보다 큰 프로젝트의 모든 프리팹을 찾습니다.

이는 다음과 동등합니다.

  • 프로젝트의 모든 4K 텍스처(예: armor.png, treasure.png)의 리스트를 반환하기 위해 t:texture size>4000 실행

  • t:prefab ref=<one of the 4K textures> 실행(예: t:prefab ref=armor.pngt:prefab ref=treasure.png를 차례로 실행)

  • 모든 결과를 집계하여 하나의 검색 항목 리스트로 반환

  • t:[shader, material, texture]: 타입이 shader, material 또는 texture인 모든 오브젝트를 찾습니다. 노멀 쿼리를 사용하면 다음과 같이 표현할 수 있습니다.

  • t:shader or t:material or t:texture

함수

Unity에는 여러 검색 항목을 조작하고 변환할 수 있는 검색 표현식 함수의 라이브러리가 있습니다. 각 함수는 여러 개의 인수를 가져와 항목 세트를 반환할 수 있습니다. Unity 검색 표현식은 중괄호를 사용하여 함수 호출을 표기합니다.

모든 함수가 포함된 전체 리스트는 여기서 확인하십시오.

예: count 함수는 파라미터로 전달된 각 세트의 항목 수를 세서 숫자를 반환합니다.

  • count{t:shader} : 프로젝트의 셰이더 수를 포함하는 세트를 반환합니다(예: {34}).
  • count{t:shader, t:texture} : 프로젝트의 셰이더와 텍스처의 수를 포함하는 세트를 반환합니다(예: {34, 2048}).

LISP 프로그래밍 언어에서 사용되는 s-expression과 비슷하게 함수를 연결할 수 있습니다.

참고: root 표현식은 하나만 존재할 수 있습니다.

평가되는 함수 체인 예시(작업순):

print{"path=@path", first{10, sort{t:texture, @size}}}: 프로젝트의 텍스처 중 가장 큰 10개의 경로를 프린트합니다.

  1. t:texture: 프로젝트의 모든 텍스처를 찾아 크기 프로퍼티를 선택합니다.
  2. sort{ t:texture, @size}: 모든 텍스처를 각 텍스처의 크기 프로퍼티에 따라 모두 정렬합니다.
  3. first{10: 정렬 순서상 첫 10개에 해당하는 텍스처를 선택합니다.
  4. print{ "path=@path": Unity 검색이 각 결과 항목의 경로 프로퍼티 path=@path를 추출하는 형식 문자열에 따라 콘솔에 이 리스트를 프린트합니다.

함수의 서명은 여러 개일 수 있으며(C#과 유사하게 메서드의 이름 및 각 공식 파라미터의 타입과 종류(값, 레퍼런스 또는 출력)), 선택적 파라미터(함수에 전달될 필요가 없는 파라미터) 및 가변 (가변적 수의 인수를 가져올 수 있는 파라미터) 파라미터를 지원할 수 있습니다.

검색 표현식의 리터럴

리터럴은 쿼리 문자열과는 반대로 검색할 실제 단어나 숫자 또는 검색해서 가져올 숫자의 금액입니다. 예를 들어, t:texture는 타입 이름에 texture가 포함된 에셋(예: Texture2D)을 검색하지만, 여기에 따옴표를 추가하여(“t:texture”) 리터럴로 만들면 “t:texture”는 이름이 t:texture인 에셋을 검색합니다.

Expression 설명
Number 리터럴 숫자(1,2,3, and so on)
Set 대괄호([ ])
String 작은따옴표 또는 큰따옴표('' 또는 "")

숫자

숫자 리터럴은 함수의 파라미터로 사용할 수 있습니다(예: first).

first{10, t:shader} -> {the first 10 shaders return by the 't:shader' query}

세트

대괄호([])를 사용하여 값 세트를 표현합니다. 세트는 모든 타입의 표현식을 포함할 수 있으나, 검색 표현식 구문 분석기는 세트 요소가 검색 쿼리가 아닌 리터럴이라고 추정합니다.

예:

[t:shader, hello, 3] -> ["t:shader", "hello", 3]

중괄호({})를 사용하는 경우, 구문 분석기가 이를 다음 3개의 쿼리로 취급합니다.

{t:shader, hello, 3} -> {<run a query for t:shader>, <run a query for hello>, <run a query for 3>}

문자열

문자열 리터럴은 일부 함수(예: format)의 파라미터로 사용할 수 있습니다. 다음과 같이 작은따옴표나 큰따옴표를 사용하는 문자열 리터럴을 지정할 수 있습니다.

“hello” 또는 ‘hello’

형식 문자열을 파라미터로 가져오는 형식 함수:

format{t:texture, '@path (@size)'}

프로퍼티 선택자 및 검색 항목 값

선택자는 @ 접두사를 사용하여 표기된 식별자입니다. 선택자를 사용하여 항목의 프로퍼티에 액세스해 계산, 필터링 또는 형식을 지정할 수 있습니다. 선택자는 동적 데이터에 대한 액세스를 허용하기 위해 UnityEngine.Object의 직렬화된 프로퍼티 또는 커스텀 함수에 매핑될 수 있습니다.

모든 검색 항목에서 지원되는 기반 선택자는 다음과 같습니다.

  • id: 이 항목의 고유한 ID(검색 제공자에 의거).
  • value: 항목의 내부값. 기본적으로 항목의 ID이지만, 함수가 항목의 값을 오버라이드할 수 있습니다.
  • label: Search 창에 표시되는 항목 레이블
  • desc 또는 description: 항목 설명(Search 창의 두 번째 줄)

Unity는 검색 항목의 일반 선택자도 정의합니다. 예:

  • @name: UnityEngine.Object.name
  • @size: 에셋에 대한 디스크의 파일 크기
  • @path: 에셋 경로
  • @extension: 에셋 파일 확장자
  • @provider: 이 항목을 산출한 검색 제공자

작업을 수행하기 위해 검색 항목의 특정 프로퍼티에 액세스하려면 다음 선택자를 사용합니다.

  • count{t={distinct{select{a:assets, @type}}}}
    • a:assets, @type은 이름이 assets인 오브젝트를 모두 찾은 다음, 해당 오브젝트의 type 프로퍼티를 선택합니다.
    • distinct는 존재하는 모든 타입의 리스트를 반환합니다.
    • t={list of types}는 타입별로 각 에셋의 리스트 여러 개를 반환합니다.
    • count는 프로젝트에 각 타입의 에셋이 몇 개 있는지 계산합니다.
  • avg{@size,t:shader}
    • t:shader, @size: 모든 셰이더를 찾은 다음 size 프로퍼티를 선택합니다.
    • avg: 프로젝트에 포함된 모든 셰이더의 평균 크기를 계산합니다.
  • print{@value, count{t:texture, t:material}}
    • 콘솔 창의 count 함수 결과에서 추출한 개수 값을 프린트합니다.

@# 선택자가 다음과 같이 직렬화 프로퍼티와 머티리얼 프로퍼티를 찾습니다.

  • sort{t:texture, @#height}: 높이 직렬화 프로퍼티 순으로 모든 텍스처를 정렬합니다.

이름 검색 표현식(별칭)

Search 창에 표시되었을 때 더 알아보기 쉽도록 검색 표현식의 이름을 지정할 수 있습니다.

예를 들어, Search 창에 sort{count{t:audio, t:texture}, @value,desc} 표현식을 입력하면 어느 개수가 어느 타입에 해당하는지 알아보기가 어려울 수 있습니다.

이때 별칭으로 sort{count{t:audio as Audio, t:texture as Texture}, desc}을 사용하면 보다 가독성 높은 결과가 산출됩니다.

별칭 이름을 동적으로 생성하려면 alias 함수를 사용하십시오. 예:

alias{[1, 2, 3], 'Title value'}

이 함수는 다음 레이블이 있는 항목이 산출됩니다.

{Title 1, Title 2, Title 3}

확장 조작자

확장 조작자 ...는 한 세트의 항목이 한 세트가 아닌 여러 세트의 항목으로 그룹화될 수 있게 합니다.

...{expandable expression} -> {sub expr 1} {sub expr 2} {sub expr N}

예:

소규모 프로젝트에 3개의 프리팹, 4개의 텍스처와 5개의 셰이더가 있는 경우, 다음 표현식은 이 모든 요소의 수를 제공합니다.

count{t:[prefab, texture, shader]} -> {12}

검색 표현식 t:[prefab, texture, shader]의 결과는 타입 프리팹, 텍스처와 셰이더를 포함하여 12가지 항목으로 구성된 합계 리스트입니다. 이는 t:prefab or t:texture or t:shader로도 표현할 수 있습니다.

각 에셋 타입의 수를 별도로 세려면 확장 조작자를 사용하십시오.

count{...t:[prefab, texture, shader]} -> count{t:prefab, t:texture, t:shader} -> {3, 4, 5}

groupBy 함수를 확장 조작자와 함께 사용하여 공통 키로 그룹화된 항목 세트를 반환할 수 있습니다.

예:

프로젝트에는 세 가지 타입의 에셋(프리팹, 텍스처, 셰이더)이 있습니다. 검색 항목 타입을 반환하는 선택자가 @type인 경우 표현식은 다음과 같이 확장됩니다.

count{t:prefab or t:texture or t:shader}

groupBy 함수를 사용하여 항목을 타입별로 그룹화한 다음, 타입별 항목 수를 셀 수 있습니다.

count{...groupBy{t:prefab or t:texture or t:shader, @type}}

검색 표현식의 예

이러한 예시는 검색 표현식이 어떻게 프로젝트의 복잡한 요청에 사용될 수 있는지 보여줍니다.

  • 씬의 프리팹 사용량 계산 및 사용량이 높은 순으로 정렬:

    sort{select{p: t:prefab *.prefab, @path, count{t:scene ref:@path} as count}, @count, desc}

  • 모든 에셋 유형 정렬 및 계산

    sort{count{...groupby{a:assets, @type}}, @value, desc}

  • 버텍스가 가장 많은 메시 찾기(프로젝트에서 @vertices 선택자를 사용할 수 있음을 가정)

    first{sort{t:mesh, @vertices, desc}}

  • 메시의 버텍스 수를 기준으로 모든 메시 정렬

    sort{select{h: t:mesh, @path, @vertices}, @vertices, desc}

  • 모든 메시의 버텍스 수 계산

    sum{select{h:t:mesh, @vertices}}

  • 메시를 참조하는 모든 에셋 찾기

    ref=select{p:t:mesh, @path}

  • 프리팹 씬 레퍼런스 수 나열

    select{p: *.prefab, @path, count{p: a:sceneIndex ref="@path"} as count}

표현식 평가

검색 표현식 평가는 C#반복자 패턴에 기반하며 산출 키워드를 사용합니다. 이는 평가가 완전한 비동기식 작업으로 노출되며 최대한 차단하지 않도록 보장합니다. 또한 각 검색 표현식이 첫 검색 항목 세트가 계산 완료되기 전에 계산을 시작하도록 허용합니다.

기본적으로 모든 검색 표현식 평가는 에디터를 차단하지 않도록 워커 스레드에서 수행됩니다. 안전한 비스레드 Unity API에 의존해야 하는 작업(예: 일부 선택자 접근자)의 경우, 이러한 작업을 메인 스레드에 대기시키고 산출된 검색 항목의 패턴을 유지하기 위한 유틸리티 API가 있습니다.

검색 표현식 언어 커스터마이즈

검색 표현식 언어는 커스터마이즈가 가능하도록 고안되었습니다. 향후 릴리스에서 프레임워크의 모든 부분을 커스터마이즈할 수 있는 API가 제공됩니다.

추가 검색 필터
함수 레퍼런스