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;
}
| 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. |
| Constructor | Description |
|---|---|
| HierarchyViewCellDescriptor | Creates a new HierarchyViewCellDescriptor. |
| Method | Description |
|---|---|
| ValidForColumn | Validates that a HierarchyViewColumnDescriptor is valid for this cell descriptor. |