Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


startDrag

If implemented, the item supports drag. It is up to the SearchProvider to properly set up the DragAndDrop manager.
Read time 1 minuteLast updated 10 days ago

Definition

public Action<SearchItem, SearchContext> startDrag

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);}