HierarchyViewCellDescriptor
Provides a cell descriptor used to register a new HierarchyViewCell for a specific HierarchyNodeTypeHandler type in the Hierarchy. Use this class to create custom UI to edit or display data for a node in a HierarchyViewCell that corresponds to a HierarchyViewColumn.
Read time 3 minutesLast updated 10 days ago
Definition
- Type: Class
- Namespace: Unity.Hierarchy
- Assembly: UnityEngine.HierarchyModule
public sealed class HierarchyViewCellDescriptor
Remarks
The following example creates a column in the Hierarchy window that displays the icons of each component attached to a GameObject. It uses to register a custom cell binding for the type that displays the component icons in the custom Hierarchy column.
HierarchyViewCellDescriptorHierarchyGameObjectHandlerThe example requires the USS file . To use this example, save the script and USS file in a folder called . Scripts in an folder can use the Hierarchy module API without additional setup. If you save the script outside of an folder, you must enable the Hierarchy built-in module in the Package Manager window, which also adds the module to your Player builds.
ComponentsColumn.ussAssets/Editor/ComponentsColumnEditorEditorAfter adding the script to your project, enable the new Components column in the Hierarchy window for it to display.
using Unity.Hierarchy;using Unity.Hierarchy.Editor;using UnityEditor;using UnityEngine;using UnityEngine.Pool;using UnityEngine.UIElements;namespace Unity.HierarchySamples.Editor{ class ComponentsColumn { const string k_ColumnId = "GameObject/Components"; const string k_IconRowUssClass = "component-icon-row"; const string k_ComponentIconUssClass = "component-icon"; static readonly ObjectPool<Image> s_ImagePool = new(() => new Image()); [InitializeOnLoadMethod] static void Initialize() { HierarchyWindow.BindView += OnBindView; } static void OnBindView(HierarchyWindow window, HierarchyView view) { view.styleSheets.Add(AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/Editor/ComponentsColumn/ComponentsColumn.uss")); } [HierarchyViewColumnDescriptor(k_ColumnId)] internal static void CreateColumnDesc(HierarchyViewColumnDescriptor desc) { desc.Title = "Components"; desc.Tooltip = "Show all Components of GameObject"; desc.DefaultPriority = 1000; desc.DefaultWidth = 100; } [HierarchyViewCellDescriptor(k_ColumnId, typeof(HierarchyGameObjectHandler))] internal static void CreateGameObjectCellDesc(HierarchyViewCellDescriptor desc) { desc.BindCell = cell => { // It's safe to cast cell.Handler to HierarchyGameObjectHandler here. This method has the // HierarchyViewCellDescriptor attribute on it with the HierarchyGameObjectHandler specified to it, // so this method is called only for nodes created by the HierarchyGameObjectHandler. HierarchyGameObjectHandler handler = (HierarchyGameObjectHandler)cell.Handler; GameObject gameObject = handler.GetGameObject(cell.Node); Component[] components = gameObject.GetComponents<Component>(); VisualElement iconRow = cell.Q(className: k_IconRowUssClass); if (iconRow == null) { iconRow = new VisualElement(); iconRow.AddToClassList(k_IconRowUssClass); iconRow.style.flexDirection = FlexDirection.Row; cell.Add(iconRow); } else { iconRow.Query<Image>(className: k_ComponentIconUssClass).ForEach(el => { el.RemoveFromHierarchy(); s_ImagePool.Release(el); }); } foreach (Component comp in components) { Texture2D icon = AssetPreview.GetMiniThumbnail(comp); if (!icon) continue; Image iconEl = s_ImagePool.Get(); iconEl.AddToClassList(k_ComponentIconUssClass); iconEl.image = icon; iconRow.Add(iconEl); } cell.IsDefaultValue = false; }; } }}
The following example shows how to style .
ComponentsColumn.uss.component-icon-row { justify-content: flex-end;}.component-icon { width: 14px; height: 14px; margin-left: 3px; margin-top: 3px;}
Fields
Value | Description |
|---|---|
| BindCell | Callback triggered when the HierarchyViewCell is bound. |
| BindColumn | Callback triggered when the column containing a HierarchyViewCell generated by this descriptor is bound to the HierarchyView. |
| UnbindCell | Callback triggered when the HierarchyViewCell is unbound. The VisualElement content of the cell is automatically cleared. Use this callback to dispose of custom resources or unregister from events. |
| UnbindColumn | Callback triggered when the column containing a HierarchyViewCell generated by this descriptor is unbound from the HierarchyView. |
Constructors
Constructor | Description |
|---|---|
| HierarchyViewCellDescriptor(System.String,System.Type) | Creates a new HierarchyViewCellDescriptor. |
Properties
Property | Description |
|---|---|
| ClearCellContent | If true, the children of the HierarchyViewCell are deleted when the cell is unbound. |
| ColumnId | Gets the column identifier that this cell is registered to. |
| HandlerType | Gets the HierarchyNodeTypeHandler type used to manage the node of this cell. |
| UserData | Gets or sets custom user data associated with this descriptor. |
Methods
Method | Description |
|---|---|
| ValidForColumn | Validates that a HierarchyViewColumnDescriptor is valid for this cell descriptor. |