Version: Unity 6.6 (6000.6)
LanguageEnglish
  • C#

HierarchyViewCellDescriptor

class in Unity.Hierarchy

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Submission failed

For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

Description

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.

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; }

Properties

Property 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.
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.
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.
UserData Gets or sets custom user data associated with this descriptor.

Constructors

Constructor Description
HierarchyViewCellDescriptor Creates a new HierarchyViewCellDescriptor.

Public Methods

Method Description
ValidForColumn Validates that a HierarchyViewColumnDescriptor is valid for this cell descriptor.