用于声明静态方法的属性,该方法为特定搜索提供程序定义新的操作。
using System.Collections.Generic; using UnityEditor; using UnityEditor.Search; using UnityEngine; using UnityEngine.Rendering; public class Example_SearchAction { [SearchActionsProvider] internal static IEnumerable<SearchAction> ActionHandlers() { return new[] { new SearchAction("asset", "print_dependencies", new GUIContent("Print Dependencies", null, "Print all dependencies of an asset.")) { // If this action is the default, double-clicking on an item to execute this action will not close the Search window. closeWindowAfterExecution = false, // Handler for a single item. handler = (item) => { var asset = item.ToObject(); if (!asset) return; var path = AssetDatabase.GetAssetPath(asset); if (string.IsNullOrEmpty(path)) return; var dependencyPaths = AssetDatabase.GetDependencies(path); foreach (var dependencyPath in dependencyPaths) { var o = AssetDatabase.LoadAssetAtPath<UnityEngine.Object>(dependencyPath); if (o != null) Debug.Log(dependencyPath, o); } } }, new SearchAction("scene", "toggle_cast_shadows", new GUIContent("Toggle Cast Shadows", null, "Toggle Cast Shadows on a Mesh")) { // Only enable this action if any of the selected items are actually a GameObject with a MeshRenderer. enabled = items => { foreach (var searchItem in items) { var go = searchItem.ToObject<GameObject>(); if (!go) continue; var mesh = go.GetComponent<MeshRenderer>(); if (mesh) return true; } return false; }, // Handler for multiple items: (used when multi selection is used in the Search Window). execute = (items) => { foreach (var searchItem in items) { var go = searchItem.ToObject<GameObject>(); if (!go) continue; var mesh = go.GetComponent<MeshRenderer>(); if (!mesh) continue; mesh.shadowCastingMode = mesh.shadowCastingMode == ShadowCastingMode.Off ? ShadowCastingMode.On : ShadowCastingMode.Off; } } }, }; } }