EnumerateNodesWithFlags(HierarchyNodeFlags)
Gets an enumerable of all hierarchy nodes that have all of the specified flags set.
Read time 2 minutesLast updated 13 days ago
Definition
- Type: Method
- Namespace: Unity.Hierarchy
- Assembly: UnityEngine.HierarchyCoreModule
public HierarchyViewModelNodesEnumerable EnumerateNodesWithFlags(HierarchyNodeFlags flags)
Parameters
The flags to match when enumerating hierarchy nodes.
Returns
Type | Description |
|---|---|
| HierarchyViewModelNodesEnumerable | An enumerable that iterates over all nodes with all of the specified flags set. |
Remarks
The following example creates a context menu item that collapses all nodes in the Hierarchy window except the paths to the selected items. The action appears in the Hierarchy Samples submenu of the context menu. It uses to iterate the selected nodes and expand the path to each one.
EnumerateNodesWithFlagsExamples
using System;using Unity.Hierarchy;using Unity.Hierarchy.Editor;using UnityEditor;using UnityEngine.UIElements;namespace Unity.HierarchySamples.Editor{ class CollapseOthers { [InitializeOnLoadMethod] static void Initialize() { HierarchyWindow.PopulateContextMenu += OnPopulateContextMenu; } static void OnPopulateContextMenu(HierarchyWindow window, HierarchyView view, HierarchyViewItem item, DropdownMenu menu) { menu.AppendAction("Hierarchy Samples/Collapse Others", a => { // Capture selected and expanded nodes. int selectedAndExpandedCount = view.ViewModel.HasFlagsCount(HierarchyNodeFlags.Selected | HierarchyNodeFlags.Expanded); Span<HierarchyNode> expandedAndSelectedNodes = selectedAndExpandedCount < 16 ? stackalloc HierarchyNode[selectedAndExpandedCount] : new HierarchyNode[selectedAndExpandedCount]; view.ViewModel.GetNodesWithFlags(HierarchyNodeFlags.Selected | HierarchyNodeFlags.Expanded, expandedAndSelectedNodes); // Create a flags change scope. This is an optimization to avoid triggering an update if no flags // actually changed after the operation. using (_ = new HierarchyViewModelFlagsChangeScope(view.ViewModel)) { // Collapse all nodes. view.ViewModel.ClearFlags(HierarchyNodeFlags.Expanded); // Expand parents of all selected nodes. foreach (ref readonly var node in view.ViewModel.EnumerateNodesWithFlags(HierarchyNodeFlags.Selected)) { var parent = view.ViewModel.GetParent(node); if (parent == HierarchyNode.Null || parent == view.Source.Root) continue; view.ViewModel.SetFlagsRecursive(parent, HierarchyNodeFlags.Expanded, HierarchyTraversalDirection.Parents); } // Expand all nodes that were previously expanded and selected. view.Expand(expandedAndSelectedNodes); } }, _ => item == null || (view.ViewModel.HasFlagsCount(HierarchyNodeFlags.Selected) == 0) ? DropdownMenuAction.Status.Disabled : DropdownMenuAction.Status.Normal); } }}