Unity 커스텀 검색 공급자 만들기
이 문서에서는 Unity에서 커스텀 검색 공급자를 만드는 방법에 대해 설명합니다. 검색 공급자는 특정 아이템을 검색하고 결과를 사용자에게 반환하는 기능을 수행합니다.
검색 공급자 개요
검색 공급자는 fetchItems 함수를 사용하여 아이템을 검색하고 결과를 필터링합니다. 이 함수는 다음과 같은 형식을 가집니다:
public delegate IEnumerable<SearchItem> GetItemsHandler(SearchContext context,
List<SearchItem> items,
SearchProvider provider);
context: 필요한 검색 컨텍스트 (예: 토큰화된 검색 및 하위 필터).items: 아이템 목록을 채울 리스트 (비동기 API를 사용하지 않는 경우).provider: 검색 공급자 자체.
SearchItem 구조체
SearchItem은 검색 결과의 개별 항목을 정의하는 간단한 구조체입니다. SearchItem에는 다음과 같은 속성들이 있습니다:
public struct SearchItem
{
public readonly string id; // 아이템의 고유 ID
public int score; // 검색 결과 정렬에 영향을 주는 점수
public string label; // 아이템의 표시 이름
public string description; // 아이템의 설명
public SearchItemDescriptionFormat descriptionFormat; // 설명의 포맷
public Texture2D thumbnail; // 썸네일
public object data; // 사용자 정의 데이터
}
SearchItem 사용 팁
SearchContext.searchText에 따라 필터링할 때는 정적 함수 SearchProvider.MatchSearchGroup을 사용하여 부분 검색을 생성할 수 있습니다.
퍼지 검색 사용하기
아이템에서 퍼지 검색을 사용하려면 FuzzySearch.FuzzyMatch를 적용할 수 있습니다. 예를 들어:
if (FuzzySearch.FuzzyMatch(sq, CleanString(item.label), ref score, matches))
item.label = RichTextFormatter.FormatSuggestionTitle(item.label, matches);
비동기 검색 API
비동기 검색 API를 사용할 때는 결과를 계산하는 데 시간이 오래 걸리거나 비동기 검색 엔진을 사용하는 경우에 적합합니다. 이 API를 사용하려면 fetchItems 함수가 IEnumerable<SearchItem>을 반환해야 합니다.
public class AsyncSearchProvider : SearchProvider
{
public AsyncSearchProvider(string id, string displayName = null)
: base(id, displayName)
{
fetchItems = (context, items, provider) => FetchItems(context, provider);
}
private IEnumerable<SearchItem> FetchItems(SearchContext context, SearchProvider provider)
{
while(ResultsNotReady())
{
yield return null;
}
var oneItem = // Get an item
yield return oneItem;
var anotherItem = // Get another item
yield return anotherItem;
if(SomeConditionThatBreaksTheSearch())
{
yield break;
}
foreach(var item in someItems)
{
yield return item;
}
}
}
예제 추가 및 활용
- 기본 검색 공급자 구현:
SearchProvider를 상속받아 기본적인 검색 기능을 제공하는 검색 공급자를 만들어 봅시다. - 데이터베이스와 통신하기: 외부 데이터베이스에서 검색 데이터를 가져오는 검색 공급자를 구현하십시오.
- 직관적인 UI 제공: 검색 결과를 사용자에게 보기 쉽게 표시하기 위한 UI 요소를 구현해 보세요.
| 구분 | 설명 |
|---|---|
| 검색 공급자 | 사용자 지정 검색 공급자를 생성할 수 있는 Unity 기능입니다. |
| SearchItem | 검색 결과의 각 항목을 정의하는 구조체입니다. |
| 비동기 API | 검색 결과를 비동기적으로 처리할 수 있는 방법입니다. |
| 퍼지 검색 | 사용자의 입력에 대해 보다 유연한 검색을 할 수 있도록 지원합니다. |
이 문서를 통해 Unity에서 커스텀 검색 공급자를 구현하는 방법을 이해하고, 더 복잡한 기능도 쉽게 구현할 수 있기를 바랍니다.