Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


HierarchyViewColumnDescriptor

Provides a column descriptor used to register a new column in the HierarchyView and to control the display and customization of this column.
Read time 4 minutesLast updated 11 days ago

Definition

  • Type: Class
  • Namespace: Unity.Hierarchy
  • Assembly: UnityEngine.HierarchyModule
public sealed class HierarchyViewColumnDescriptor

Remarks

The following example creates a column in the Hierarchy window that displays the icons of each component attached to a GameObject. It uses
HierarchyViewColumnDescriptor
to register the column, configure its properties, and pair the column with a
HierarchyViewCellDescriptor
to populate each cell.
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

BindColumnCallback triggered when the column is built and shown in the HierarchyView.
BindHeaderCallback that binds a custom header.
DestroyHeaderCallback triggered when the window is closed.
MakeHeaderCallback that creates a custom header. If null, the default header displays both the icon and text of the Name field.
UnbindColumnCallback triggered when the column is about to be destroyed.
UnbindHeaderCallback triggered when the header is about to be destroyed or after domain reload.

Constructors

Properties

Property

Description

DefaultPriorityGets or sets the priority used to sort column order. A priority of 0 corresponds to the Name column in the Hierarchy. A negative priority places the column to the left of the Name column. A positive priority places the column to the right of the default Name column.
DefaultVisibilityGets or sets whether the column is initially visible.
DefaultWidthGets or sets the default width when first instantiating the column. If you set it to a negative value, the column is assigned an arbitrary width.
IconGets or sets the icon displayed in the header of the column.
IdGets the column identifier. HierarchyViewCellDescriptor instances use this identifier to register themselves with the column.
TitleGets or sets the display name of the column. If null, the header is empty unless it contains an icon.
TooltipGets or sets the tooltip shown when the user hovers over the header of this column.
UserDataGets or sets user data associated with this descriptor.