검색 표현식을 사용하면 검색 쿼리 언어를 추가하여 여러 제공자를 교차 참조하는 복잡한 쿼리(예: 씬에서 컴파일하지 않는 셰이더를 사용하는 모든 오브젝트 검색)를 표현할 수 있게 해줍니다.
검색 표현식을 연결하여 검색 항목에서 세트 조작을 수행하거나 변환할 수 있습니다.
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.png
와 t: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개의 경로를 프린트합니다.
t:texture
: 프로젝트의 모든 텍스처를 찾아 크기 프로퍼티를 선택합니다.sort{ t:texture, @size}
: 모든 텍스처를 각 텍스처의 크기 프로퍼티에 따라 모두 정렬합니다.first{10
: 정렬 순서상 첫 10개에 해당하는 텍스처를 선택합니다.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}}
@#
선택자가 다음과 같이 직렬화 프로퍼티와 머티리얼 프로퍼티를 찾습니다.
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가 제공됩니다.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.