fetchDescription
Handler to provide an asynchronous description for an item. Is called when the item is about to be displayed. Allows a plugin provider to only fetch long descriptions when they are needed.
Read time 1 minuteLast updated 10 days ago
Definition
- Type: Field
- Namespace: UnityEditor.Search
- Assembly: UnityEditor
public Func<SearchItem, SearchContext, string> fetchDescription
Examples
[SearchItemProvider]internal static SearchProvider CreateProvider(){ return new SearchProvider("example_tree", "Trees") { filterId = "tree:", priority = 99999, // Put example provider at a low priority showDetailsOptions = ShowDetailsOptions.Inspector | ShowDetailsOptions.Actions, fetchItems = (context, items, provider) => FetchItems(context, provider), fetchThumbnail = (item, context) => AssetDatabase.GetCachedIcon(item.id) as Texture2D, fetchPreview = (item, context, size, options) => AssetDatabase.GetCachedIcon(item.id) as Texture2D, fetchLabel = (item, context) => AssetDatabase.LoadMainAssetAtPath(item.id).name, fetchDescription = (item, context) => AssetDatabase.LoadMainAssetAtPath(item.id).name, toObject = (item, type) => AssetDatabase.LoadMainAssetAtPath(item.id), trackSelection = TrackSelection, startDrag = StartDrag };}private static IEnumerable<SearchItem> FetchItems(SearchContext context, SearchProvider provider){ if (context.empty) yield break; // Yield items asynchronously which is the recommended way. foreach (var guid in AssetDatabase.FindAssets("t:Prefab tree " + context.searchQuery)) yield return provider.CreateItem(context, AssetDatabase.GUIDToAssetPath(guid), null, null, null, null);}private static void TrackSelection(SearchItem searchItem, SearchContext searchContext){ EditorGUIUtility.PingObject(AssetDatabase.LoadMainAssetAtPath(searchItem.id));}private static void StartDrag(SearchItem item, SearchContext context){ if (context.selection.Count > 1) { var selectedObjects = context.selection.Select(i => AssetDatabase.LoadMainAssetAtPath(i.id)); var paths = context.selection.Select(i => i.id).ToArray(); StartDrag(selectedObjects.ToArray(), paths, item.GetLabel(context, true)); } else StartDrag(new[] { AssetDatabase.LoadMainAssetAtPath(item.id) }, new[] { item.id }, item.GetLabel(context, true));}public static void StartDrag(UnityEngine.Object[] objects, string[] paths, string label = null){ if (paths == null || paths.Length == 0) return; DragAndDrop.PrepareStartDrag(); DragAndDrop.objectReferences = objects; DragAndDrop.paths = paths; DragAndDrop.StartDrag(label);}