Repository navigation
Conversation
- Added `[Sortable]` attribute for class-level opt-in to custom sorting. - Added `[Order]` attribute for defining explicit property priorities[cite: 2]. - Modified `ToolboxPropertyHandler.cs` to cache order data and provide a zero-GC Comparison delegate[cite: 2]. - Updated `ToolboxEditorGUI.cs` to dynamically sort child properties using `ListPool` with stable indexing[cite: 2].
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This PR introduces a robust, zero-allocation property ordering system for the Inspector. It allows developers to explicitly define the rendering order of serialized fields without relying on their declaration order in the script.
Changes Made
Added
[Sortable]attribute: A class-level opt-in attribute. Properties will only be sorted if the parent class is marked with this attribute, ensuring zero performance overhead for standard classes.Added
[Order(int)]attribute: A field-level attribute to define explicit rendering priority. Lower numbers are drawn first.Modified
ToolboxPropertyHandler.cs:Caches the
[Order]attribute data.Provides a static, zero-GC
Comparisondelegate (ToolboxPropertyHandler.Comparison) to prevent memory allocations during Inspector repaints.Updated
ToolboxEditorGui.cs:Modified
DrawPropertyChildrento support dynamic sorting.Implemented
ListPoolto collect properties without generating garbage.Default properties (without
[Order]) retain their natural index but are shifted (propsList.Count + 1) to ensure[Order(0)]always takes absolute priority and is pushed to the very top.Usage Example
To enable sorting, the class must be marked with
[Sortable]. Fields can then be reordered using[Order(int)], regardless of where they are declared in the code.Performance Note
The sorting algorithm is executed dynamically during the
OnGUIlayout pass, but it is heavily optimized. It utilizesListPoolfor temporary data collection and a cached static delegate for comparisons, resulting in 0 Bytes of GC Allocation per frame.