Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


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
HierarchyViewCellDescriptor
to register a custom cell binding for the
HierarchyGameObjectHandler
type that displays the component icons in the custom Hierarchy column.
The example requires the USS file
ComponentsColumn.uss
. To use this example, save the script and USS file in a folder called
Assets/Editor/ComponentsColumn
. Scripts in an
Editor
folder can use the Hierarchy module API without additional setup. If you save the script outside of an
Editor
folder, you must enable the Hierarchy built-in module in the Package Manager window, which also adds the module to your Player builds.
After 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

BindCellCallback triggered when the HierarchyViewCell is bound.
BindColumnCallback triggered when the column containing a HierarchyViewCell generated by this descriptor is bound to the HierarchyView.
UnbindCellCallback 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.
UnbindColumnCallback triggered when the column containing a HierarchyViewCell generated by this descriptor is unbound from the HierarchyView.

Constructors

Properties

Property

Description

ClearCellContentIf true, the children of the HierarchyViewCell are deleted when the cell is unbound.
ColumnIdGets the column identifier that this cell is registered to.
HandlerTypeGets the HierarchyNodeTypeHandler type used to manage the node of this cell.
UserDataGets or sets custom user data associated with this descriptor.

Methods

Method

Description

ValidForColumnValidates that a HierarchyViewColumnDescriptor is valid for this cell descriptor.