SearchExpression
класс в UnityEditor.Search
Описание
Поисковые выражения позволяют добавить в язык поисковых запросов сложные запросы, которые перекликаются с несколькими провайдерами, например, для поиска всех объектов в сцене, которые используют некомпилируемый шейдер.
Поисковые выражения могут быть цеплены вместе для преобразования или выполнения набора манипуляций с элементами поиска.
В руководстве содержится пример Как использовать поисковое выражение.
Эти примеры показывают, как SearchExpression используется в оценщике:
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using UnityEditor; using UnityEditor.Search; using UnityEngine; public class SearchExpressionEvaluator_Example { [SearchExpressionEvaluator(SearchExpressionType.Iterable | SearchExpressionType.Variadic)] [SearchExpressionEvaluatorSignatureOverload(SearchExpressionType.Number, SearchExpressionType.Iterable | SearchExpressionType.Variadic)] [Description("Extract and returns the X first results for each expression.")] public static IEnumerable<SearchItem> TakeXFirst(SearchExpressionContext c) { var argIndex = 0; var takeNumber = 1; if (c.args[0].types.HasFlag(SearchExpressionType.Number)) { ++argIndex; takeNumber = Math.Max((int)(c.args[0].GetNumberValue(takeNumber)), 0); } for ( ; argIndex < c.args.Length; ++argIndex) { var iterable = c.args[argIndex].Execute(c); var taken = 0; foreach (var item in iterable) { if (item == null) yield return null; else { yield return item; ++taken; if (taken == takeNumber) { c.Break(); break; } } } } } [MenuItem("Examples/ExpressionEvaluator/Take First")] static void TestTakeFirst() { var ctx = SearchService.CreateContext("takexfirst{[1,2,3,4], [34, 45, 66], t:script}"); SearchService.ShowWindow(ctx); } [MenuItem("Examples/ExpressionEvaluator/Take 2 First")] static void TestTake2First() { var ctx = SearchService.CreateContext("takexfirst{2, [1,2,3,4], [34, 45, 66], t:script}"); SearchService.ShowWindow(ctx); } [Description("Returns ids of current selection")] [SearchExpressionEvaluator(SearchExpressionEvaluationHints.ThreadNotSupported)] public static IEnumerable<SearchItem> SelectionIds(SearchExpressionContext c) { var instanceIds = UnityEditor.Selection.instanceIDs; foreach (var id in instanceIds) { yield return SearchExpression.CreateItem(id, c.ResolveAlias("selected id")); } } [MenuItem("Examples/ExpressionEvaluator/Selection ids")] static void SelectionIds() { var ctx = SearchService.CreateContext("selectionids{}"); SearchService.ShowWindow(ctx); } [Description("Returns asset paths corresponding to a list of instance ids")] [SearchExpressionEvaluator("IdsToPaths", SearchExpressionEvaluationHints.ThreadNotSupported, SearchExpressionType.Iterable)] public static IEnumerable<SearchItem> IdsToPath(SearchExpressionContext c) { foreach (var idItem in c.args[0].Execute(c)) { if (SearchExpression.TryConvertToDouble(idItem, out var idNum)) { var id = (int)idNum; var path = AssetDatabase.GetAssetPath(id); if (!string.IsNullOrEmpty(path)) { yield return SearchExpression.CreateItem(path, c.ResolveAlias("asset path")); } } } } [MenuItem("Examples/ExpressionEvaluator/Selection ids to Paths")] static void IdsToPaths() { var ctx = SearchService.CreateContext("IdsToPaths{selectionids{}}"); SearchService.ShowWindow(ctx); } [Description("Convert arguments to a string allowing you to format the result.")] [SearchExpressionEvaluator(SearchExpressionType.Selector | SearchExpressionType.Text, SearchExpressionType.Iterable | SearchExpressionType.Literal | SearchExpressionType.Variadic)] [SearchExpressionEvaluatorSignatureOverload(SearchExpressionType.Iterable | SearchExpressionType.Literal | SearchExpressionType.Variadic)] public static IEnumerable<SearchItem> FormatItems(SearchExpressionContext c) { var skipCount = 0; if (SearchExpression.GetFormatString(c.args[0], out var formatStr)) skipCount++; var items = c.args.Skip(skipCount).SelectMany(e => e.Execute(c)); var dataSet = SearchExpression.ProcessValues(items, null, item => SearchExpression.FormatItem(c.search, item, formatStr)); return dataSet; } [MenuItem("Examples/ExpressionEvaluator/Get Script Paths")] static void GetScriptPaths() { var ctx = SearchService.CreateContext("formatitems{t:script search}"); SearchService.ShowWindow(ctx); } }
Свойства
| Свойство | Описание |
|---|---|
| alias | Псевдоним выражения. Это полезно для присвоения более читаемого результата математическому выражению (lile Count). |
| innerText | Это внутренний текст выражения. Это означает текст без каких-либо специальных разделителей. Пример: выражение [1, 2, 3], которое является набором выражений, будет иметь innerText 1,2,3. |
| name | Имя функции оценщика или внешний текст. Это, как правило, поле для отладки. |
| outerText | Это внешний текст выражения. Это означает полный текст с любыми специальными разделителями. Пример: выражение [1, 2, 3], которое является набором выражений, будет иметь outerText из [1,2,3]. |
| parameters | Список параметров выражения. Обратите внимание, что каждый параметр является выражением сам по себе. |
| types | Агрегирование типов выражения. Этот метод используется в основном для проверки параметров выражения. |
Открытые методы
| Метод | Описание |
|---|---|
| Execute | Выполнить SearchEXpression, дающее определенный SearchContext В зависимости от флагов выражение может быть оценено в рабочем потоке (по умолчанию) или в главном потоке. Оно возвращает перечислимый список SearchItem. |
| GetBooleanValue | Попробуйте проанализировать innerText и преобразовать его в логическое значение. |
| GetNumberValue | Попробуйте проанализировать innerText и преобразовать его в двойное значение. |
| IsKeyword | Проверьте, является ли innerText выражения встроенным SearchExpressionKeyword. |
| ToString | Преобразование выражения в строку. |
Статические методы
| Метод | Описание |
|---|---|
| Check | Выполняет SearchExpression и проверяет, является ли внутреннее значение первого полученного SearchItem истинным — то есть не 0, не null, не "" и не false. |
| CreateId | Создать уникальный идентификатор. Это полезно при создании нового SearchItem. |
| CreateItem | Создать новый SearchItem из значения с дополнительной меткой. |
| FormatItem | Возьмите строку формата и замените все селекторы в ней на выбранные значения, полученные из SearchItem. |
| GetFormatString | Извлекает строку формата из заданного выражения. Эту функцию следует использовать для извлечения строки формата из входного параметра SearchExpression. Например, вычислитель print{"this is it: @label"} принимает строку формата в качестве первого параметра. |
| IsTrue | Проверяет, является ли внутреннее значение SearchItem истинным. То есть значение не равно 0, не null, не "" и не false. |
| ProcessValues | Берёт группу SearchItem и применяет к элементу функцию-преобразователь processHandler, чтобы задать его внутреннее значение или outputValueField. Учтите, что эти элементы обрабатываются в главном потоке, поэтому можно разрешать селекторы любого вида. |
| TryConvertToDouble | Разрешить селектор на элементе и попытаться преобразовать выбранное значение в двойное. |