Unity 6.3
0 онлайн 97 гостей 3 в системе
Вход
Unity Editor interface Шаг 55 из 131

Регистрация обработчика действий

Вы можете зарегистрировать действия для поставщика поиска. Пользователи могут получить доступ к зарегистрированным действиям с помощью значка More Options (и) в результатах поиска.

Примечание: Регистрация обработчика действий и регистрация поставщика поиска являются разными процессами. Можно зарегистрировать новые обработчики действий для существующих поставщиков поиска.

Чтобы зарегистрировать действие, создайте функцию, помеченную атрибутами SearchActionsProvider. Эта функция должна возвращать IEnumerable<SearchAction>.

В следующем примере показано, как зарегистрировать действия для поставщика поиска ассетов.

[SearchActionsProvider]
internal static IEnumerable<SearchAction> ActionHandlers()
{
    return new[]
    {
        new SearchAction("asset", "select", Icons.@goto, "Select asset...")
        {
            handler = (item, context) =>
            {
                var asset = AssetDatabase.LoadAssetAtPath<Object>(item.id);
                if (asset != null)
                {
                    Selection.activeObject = asset;
                    EditorGUIUtility.PingObject(asset);
                    EditorWindow.FocusWindowIfItsOpen(
                        Utils.GetProjectBrowserWindowType());
                }
            }
        },
        new SearchAction("asset", "open", SearchIcon.open, "Open asset... (Alt+Enter)")
        {
            handler = (item, context) =>
            {
                var asset = AssetDatabase.LoadAssetAtPath<Object>(item.id);
                if (asset != null)
                    AssetDatabase.OpenAsset(asset);
            }
        },
        new SearchAction("asset", "reveal", SearchIcon.folder, "Show in Explorer")
        {
            handler = (item, context) =>
            {
                EditorUtility.RevealInFinder(item.id);
            }
        }
    };
}

Действия поиска

SearchAction класс описывает действие и предоставляет обработчик, выполняющий это действие для конкретного SearchItem.

public class SearchAction
{
    public SearchAction(string providerType, string name,
                        Texture2D icon = null,
                        string tooltip = null);
    public ActionHandler handler;
    public EnabledHandler isEnabled;
}

providerType — это уникальный ID поставщика, для которого вы регистрируете действие.

ActionHandler имеет следующую подпись:

// item: item that needs the action to be executed.
// context: search context of the SearchTool when the item is executed.
public delegate void ActionHandler(SearchItem item, SearchContext context);

Вы можете настроить действие с помощью предиката isEnabled, который определяет, доступно ли действие для конкретного элемента.

Контекстный поиск

Чтобы предоставить контекстные действия (правый щелчок) для определенных типов элементов в результатах поиска, зарегистрируйте действие context для поставщика поиска.

Следующий пример взят из поставщика поиска ассетов:

new SearchAction(type, "context", null, "Context")
{
    handler = (item, context) =>
    {
        var asset = AssetDatabase.LoadAssetAtPath<Object>(item.id);
        if (asset != null)
        {
            Selection.activeObject = asset;
            EditorUtility.DisplayPopupMenu(
                QuickSearchTool.ContextualActionPosition,
                "Assets/", null);
        }
    }
}