-
Notifications
You must be signed in to change notification settings - Fork 12
CHANGELOG
github-actions[bot] edited this page Dec 29, 2025
·
28 revisions
All notable changes to Unity Helpers will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
-
Comprehensive Odin Inspector Attribute Support: All Unity Helpers inspector attributes now work seamlessly with Odin Inspector's
SerializedMonoBehaviourandSerializedScriptableObjecttypes-
[WButton]: Full support including grouping, placement, history, async methods, and parameters -
[WShowIf]: Conditional property display based on field values, methods, or comparisons -
[WReadOnly]: Disables editing while preserving display in Odin inspectors -
[WEnumToggleButtons]: Toggle button UI for enum selection with flags support -
[WValueDropDown]: Dropdown selection from custom value lists -
[WInLineEditor]: Inline editing of referenced ScriptableObjects and components -
[WNotNull]: Null reference validation with HelpBox warnings/errors -
[ValidateAssignment]: Field validation for null, empty strings, and empty collections -
[StringInList]: String selection from predefined lists or method providers -
[IntDropDown]: Integer selection from predefined value lists - No setup required — attributes work identically whether Odin Inspector is installed or not
- Custom Odin drawers registered when
ODIN_INSPECTORsymbol is defined
-
-
WButton Custom Editor Integration: New
WButtonEditorHelperclass for integrating WButton functionality into custom editors- Only needed when creating custom
OdinEditorsubclasses for specific types - Provides simple API for any custom editor to draw WButton methods
- Methods:
DrawButtonsAtTop(),DrawButtonsAtBottom(),ProcessInvocations(), and convenience methods - Documented integration patterns for both Odin Inspector and standard Unity custom editors
- Only needed when creating custom
-
Manual Recompile Silent Failure After Build: Fixed an issue where the "Request Script Recompilation" menu item and shortcut would stop responding after building a project (particularly on Linux)
- Added defensive null check in compilation pending evaluator to prevent silent
NullReferenceException - The null evaluator scenario could occur when static field initialization failed or was corrupted during build operations without a domain reload
- Added defensive null check in compilation pending evaluator to prevent silent
See the roadmap for details
- Documentation only (
WGroupEndexamples)
- Fix packaging issue related to rsp files
- Fix packaging issue related to Styles/Elements/Progress.meta file
- Updated
package.jsonto be OpenUPM-compatible
-
llms.txt: Added
llms.txtfile following the llmstxt.org specification for LLM-friendly documentation- Provides a structured overview of package features, APIs, and documentation links for AI assistants
- Enables third-party LLMs to quickly understand and work with the Unity Helpers codebase
-
Auto-Load Singleton System: New singleton pattern with configurable lifetimes and thread-safe execution
-
UnityMainThreadGuardfor ensuring operations run on the main thread -
UnityMainThreadDispatcherwith configurable lifecycle management -
AutoLoadSingletonAttributefor automatic singleton instantiation during Unity start-up phases - Reworked the autoload singleton architecture for better scene persistence
-
-
Asset Change Detection: Monitor asset changes with
DetectAssetChangedAttribute- Annotate methods to automatically execute when specific asset types are created or deleted
- Support for inheritance with
IncludeAssignableTypesoption - Automatic registration and callback execution via asset processor
-
Inspector Attributes & Drawers: Comprehensive custom inspector tooling
-
WGroupattribute for visual grouping of inspector properties, including collapsible sections and palette-driven styling -
WButtonattribute with support for async/Task methods and custom styling -
WEnumToggleButtonsattribute for toggle-based enum selection in inspector -
WShowIfconditional display attribute improvements - Enhanced dropdown attributes for better property selection
-
-
Inspector Validation Attributes: Enhanced inspector feedback for null/invalid field detection
-
WNotNullAttributenow displays a warning or error HelpBox in the inspector when the field is null -
WNotNullAttributenew properties:MessageType(Warning/Error enum) andCustomMessage(string) for customizable feedback -
WNotNullAttributenew constructor overloads for easy customization of message type and custom messages - New
WNotNullPropertyDrawerfor rendering validation feedback in the inspector -
ValidateAssignmentAttributenow displays a warning or error HelpBox in the inspector when the field is invalid (null, empty string, or empty collection) -
ValidateAssignmentAttributenew properties:MessageType(Warning/Error enum) andCustomMessage(string) for customizable feedback -
ValidateAssignmentAttributenew constructor overloads for easy customization of message type and custom messages - New
ValidateAssignmentPropertyDrawerfor rendering validation feedback in the inspector - Both attributes maintain full backward compatibility—existing code works unchanged with default warning messages
-
StringInListAttributenow supports[StringInList(nameof(Method))]to call parameterless instance or static methods on the decorated object, and the drawer exposes the same experience in both IMGUI and UI Toolkit inspectors -
WButtonnow supportsgroupPriorityandgroupPlacementparameters for fine-grained control over button group ordering and positioning
-
-
Serialization Data Structures: Production-ready serializable collections
-
SerializableDictionary<TKey, TValue>with custom inspector drawer -
SerializableSortedDictionary<TKey, TValue>with ordered iteration -
SerializableHashSet<T>with custom set drawer and duplicate detection -
SerializableSortedSet<T>for sorted sets withIComparable<T>elements -
SerializableNullable<T>for nullable value types in inspector -
SerializableTypefor type references in inspector - Pagination support for large collections in the Editor
- Inline nested editor support for complex types
- Undo/Redo support for all serializable collection modifications
- Confirmation dialog when clearing collections to prevent accidental data loss
-
-
Editor Tooling Enhancements:
- Enhanced
StringInListDrawerfor validated string input with suggestions - UI Toolkit-based editors for modern Unity editor integration
- Configurable settings windows with improved layout and styling
- Move up/down buttons for reordering collection elements
- Add/remove buttons with improved visual styling
- Added Request Script Recompilation menu item (
Tools ▸ Wallstop Studios ▸ Unity Helpers) to manually trigger script recompilation - The "Request Script Compilation" utility includes a Unity Shortcut Manager binding (Default Ctrl-Cmd + Alt + R) for quick access. The shortcut appears under Wallstop Studios / Request Script Compilation and can be remapped like any other Unity shortcut.
- Coroutine wait buffer defaults can now be configured under Project Settings ▸ Wallstop Studios ▸ Unity Helpers. The generated
Resources/WallstopStudios/UnityHelpers/UnityHelpersBufferSettings.assetapplies the selected quantization, entry caps, and LRU mode automatically on domain reload or when the player starts (unless your code overrides the values at runtime). - Added Unity Method Analyzer (
Tools ▸ Wallstop Studios ▸ Unity Helpers ▸ Unity Method Analyzer) for detecting inheritance issues and Unity lifecycle method errors across C# codebases
- Enhanced
-
Random Number Generation: Extended PRNG capabilities
- Added
BlastCircuitRandomandWaveSplatRandomgenerators with improved performance characteristics - New
RandomGeneratorMetadatasystem for inspecting generator properties - Extended random sampling methods with improved statistical distribution
- Added
-
Array Pooling: New
SystemArrayPool<T>and unifiedPooledArray<T>return type- Added
SystemArrayPool<T>wrappingSystem.Buffers.ArrayPool<T>.Sharedfor variable-sized allocations - Added
PooledArray<T>struct as unified return type for all array pools with properLengthtracking -
WallstopArrayPool<T>andWallstopFastArrayPool<T>now returnPooledArray<T>instead ofPooledResource<T[]> - Critical for
SystemArrayPool<T>: returned arrays may be larger than requested; always usepooled.Length, notarray.Length
- Added
-
Grid Concave Hull Reliability:
- Edge-split and grid KNN hull builders now insert missing axis-aligned corners after the initial pass, guaranteeing concave stair, horseshoe, and serpentine inputs retain their interior vertices even when only sparse samples exist.
- Improved handling of staircase patterns, axis-corner preservation, and diagonal-only rejection for more robust hull generation.
-
Random Number Generation: Critical edge case handling
- Fixed poor handling of
NextFloat()andNextDouble()potentially returning exactly0.0or1.0in extensions and helpers - Fixed sampling bias in
NextUlong()for more uniform distribution - Ensured proper range handling for all random generation methods
- Fixed poor handling of
-
IllusionFlow Random: Serialization and performance issues
- Fixed deserialization bugs in
IllusionFlowcomponents - Optimized to reduce GC churn during effect processing
- Fixed deserialization bugs in
-
Editor & Inspector: Multiple rendering and caching bugs
- Fixed stale label caching causing incorrect inspector display
- Fixed scene loading edge cases in editor workflows
-
Component System: Runtime component query issues
- Fixed
GetComponentsreturning null arrays in some cases - Fixed jitter-related bugs in component updates
- Fixed
-
Extension Methods: Mathematical edge cases
- Fixed calculations with zero or negative areas (bounds, rectangles, circles)
- Fixed color averaging bugs in color extension methods
-
Geometry & Spatial: Convex hull computation
- Fixed convex hull behavior for edge cases (collinear points, degenerate cases)
- Improved hull computation accuracy and performance
-
GUID Generation: Specification compliance
- Fixed GUID v4 generation to properly set version and variant bits per RFC 4122
-
Editor Settings: Project settings and drawer issues
- Fixed obsolete API usage in editor code
- Fixed project settings panel rendering issues
- Fixed reflection-based property access for better performance
-
Scriptable Object Singletons: Duplicate folders should no longer be created
- Fixed a "should-never-happen" bug where, if a singleton was accessed for the first time off the main thread, it would never be able to be accessed for the lifetime of the process
- Fixed a bug where auto-creation would happen concurrently with AssetDatabase importing, resulting in Unity crashing with no error message
-
Performance Optimizations:
- Reduced reflection usage in custom property drawers (10-100x faster in some cases)
- Optimized list navigation and caching for large collections
- Faster indexing and lookup in serializable data structures
- Improved drawer update performance for complex inspector hierarchies
- Data structure conversion optimizations
- Minor relational component performance improvements, specifically for children components
- Reduced GC allocations across property drawers, editor tools, and various helpers
-
EnhancedImage Visual Component:
- Improved material instance management with proper cleanup OnDestroy
- Better domain reload handling for HDR color and material state persistence
- Enhanced editor inspector with automatic material fix suggestions
-
Animation Editor Tools:
- Fixed FPS field handling in Animation Viewer and Sprite Sheet Animation Creator
- Improved frame reordering and preview responsiveness
-
Documentation:
- Major documentation refactor for clarity
- Added GUID generation documentation
- Improved inline code documentation
- Better attribute usage examples
-
Breaking Changes:
- Removed
KVector2(deprecated, use Unity's built-in Vector2) - Renamed
KGuid->WGuid, changed data layout - Forced
WallstopFastArrayPoolto forceunmanagedtypes. This pool does not clear arrays and can leak references. -
WallstopArrayPool<T>andWallstopFastArrayPool<T>now returnPooledArray<T>instead ofPooledResource<T[]>. Update usages frompooled.resourcetopooled.Arrayand consider usingpooled.Lengthfor iteration bounds. - The legacy line-division concave hull overload
BuildConcaveHull(IEnumerable<FastVector3Int>, Grid, float scaleFactor, float concavity)has been marked[Obsolete]and now throwsNotSupportedException. UseConcaveHullStrategy.KnnorConcaveHullStrategy.EdgeSplit(and their dedicated helpers) instead; the docs now call out this retirement explicitly. -
StringInListinspectors now keep the property row single-line and open a dedicated popup that contains search, pagination, and keyboard navigation for large catalogs (applies to both IMGUI and UI Toolkit drawers, includingSerializableType).
- Removed
-
API Improvements:
- Simplified
TryAddmethods for collections - Enforced
IComparableconstraint where appropriate for sorting - Better handling of null additions in collections
- Updated editor tooling for better integration with Unity 2021.3+
- Default IList.Sort to Grail sort for stability and improved performance
- Simplified
-
Documentation:
- Updated documentation to reflect new features and API changes
- Re-organized documentation into a more logical structure
- Consolidated documentation naming around kebab-case
- Deprecate BinaryFormatter with
[Obsolete], keep functional for trusted/legacy scenarios. - Make GameObject JSON converter output structured JSON with
name,type, andinstanceId. - Fix stray
UnityEditorimports in Runtime to ensure clean player builds.
- See commit history for incremental features (random engines, spatial trees, serialization converters, editor tools).
📦 Unity Helpers | 📖 Documentation | 🐛 Issues | 📜 MIT License
- Inspector Button
- Inspector Conditional Display
- Inspector Grouping Attributes
- Inspector Inline Editor
- Inspector Overview
- Inspector Selection Attributes
- Inspector Settings
- Inspector Validation Attributes
- Utility Components
- Visual Components
- Data Structures
- Helper Utilities
- Math And Extensions
- Pooling Guide
- Random Generators
- Reflection Helpers
- Singletons