Skip to content

CHANGELOG

github-actions[bot] edited this page Dec 30, 2025 · 28 revisions

Changelog

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.

[Unreleased]

[3.0.5]

Added

  • GitHub Pages Support: All documentation is now available via a pretty GitHub Pages
  • GitHub Wiki Support: All documentation is now available via a less pretty GitHub Wiki
  • Comprehensive Odin Inspector Attribute Support: All Unity Helpers inspector attributes now work seamlessly with Odin Inspector's SerializedMonoBehaviour and SerializedScriptableObject types
    • [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_INSPECTOR symbol is defined
  • WButton Custom Editor Integration: New WButtonEditorHelper class for integrating WButton functionality into custom editors
    • Only needed when creating custom OdinEditor subclasses 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

Fixed

  • 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

See the roadmap for details

[3.0.4]

Fixed

  • Documentation only (WGroupEnd examples)

[3.0.3]

Fixed

  • Fix packaging issue related to rsp files

[3.0.2]

Fixed

  • Fix packaging issue related to Styles/Elements/Progress.meta file

[3.0.1]

Fixed

  • Updated package.json to be OpenUPM-compatible

[3.0.0]

Added

  • llms.txt: Added llms.txt file 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
    • UnityMainThreadGuard for ensuring operations run on the main thread
    • UnityMainThreadDispatcher with configurable lifecycle management
    • AutoLoadSingletonAttribute for 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 IncludeAssignableTypes option
    • Automatic registration and callback execution via asset processor
  • Inspector Attributes & Drawers: Comprehensive custom inspector tooling
    • WGroup attribute for visual grouping of inspector properties, including collapsible sections and palette-driven styling
    • WButton attribute with support for async/Task methods and custom styling
    • WEnumToggleButtons attribute for toggle-based enum selection in inspector
    • WShowIf conditional display attribute improvements
    • Enhanced dropdown attributes for better property selection
  • Inspector Validation Attributes: Enhanced inspector feedback for null/invalid field detection
    • WNotNullAttribute now displays a warning or error HelpBox in the inspector when the field is null
    • WNotNullAttribute new properties: MessageType (Warning/Error enum) and CustomMessage (string) for customizable feedback
    • WNotNullAttribute new constructor overloads for easy customization of message type and custom messages
    • New WNotNullPropertyDrawer for rendering validation feedback in the inspector
    • ValidateAssignmentAttribute now displays a warning or error HelpBox in the inspector when the field is invalid (null, empty string, or empty collection)
    • ValidateAssignmentAttribute new properties: MessageType (Warning/Error enum) and CustomMessage (string) for customizable feedback
    • ValidateAssignmentAttribute new constructor overloads for easy customization of message type and custom messages
    • New ValidateAssignmentPropertyDrawer for rendering validation feedback in the inspector
    • Both attributes maintain full backward compatibility—existing code works unchanged with default warning messages
    • StringInListAttribute now 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
    • WButton now supports groupPriority and groupPlacement parameters 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 with IComparable<T> elements
    • SerializableNullable<T> for nullable value types in inspector
    • SerializableType for 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 StringInListDrawer for 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.asset applies 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
  • Random Number Generation: Extended PRNG capabilities
    • Added BlastCircuitRandom and WaveSplatRandom generators with improved performance characteristics
    • New RandomGeneratorMetadata system for inspecting generator properties
    • Extended random sampling methods with improved statistical distribution
  • Array Pooling: New SystemArrayPool<T> and unified PooledArray<T> return type
    • Added SystemArrayPool<T> wrapping System.Buffers.ArrayPool<T>.Shared for variable-sized allocations
    • Added PooledArray<T> struct as unified return type for all array pools with proper Length tracking
    • WallstopArrayPool<T> and WallstopFastArrayPool<T> now return PooledArray<T> instead of PooledResource<T[]>
    • Critical for SystemArrayPool<T>: returned arrays may be larger than requested; always use pooled.Length, not array.Length
  • 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.

Fixed

  • Random Number Generation: Critical edge case handling
    • Fixed poor handling of NextFloat() and NextDouble() potentially returning exactly 0.0 or 1.0 in extensions and helpers
    • Fixed sampling bias in NextUlong() for more uniform distribution
    • Ensured proper range handling for all random generation methods
  • IllusionFlow Random: Serialization and performance issues
    • Fixed deserialization bugs in IllusionFlow components
    • Optimized to reduce GC churn during effect processing
  • 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 GetComponents returning null arrays in some cases
    • Fixed jitter-related bugs in component updates
  • 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

Improved

  • 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

Changed

  • Breaking Changes:
    • Removed KVector2 (deprecated, use Unity's built-in Vector2)
    • Renamed KGuid -> WGuid, changed data layout
    • Forced WallstopFastArrayPool to force unmanaged types. This pool does not clear arrays and can leak references.
    • WallstopArrayPool<T> and WallstopFastArrayPool<T> now return PooledArray<T> instead of PooledResource<T[]>. Update usages from pooled.resource to pooled.Array and consider using pooled.Length for iteration bounds.
    • The legacy line-division concave hull overload BuildConcaveHull(IEnumerable<FastVector3Int>, Grid, float scaleFactor, float concavity) has been marked [Obsolete] and now throws NotSupportedException. Use ConcaveHullStrategy.Knn or ConcaveHullStrategy.EdgeSplit (and their dedicated helpers) instead; the docs now call out this retirement explicitly.
    • StringInList inspectors 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, including SerializableType).
  • API Improvements:
    • Simplified TryAdd methods for collections
    • Enforced IComparable constraint 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
  • Documentation:
    • Updated documentation to reflect new features and API changes
    • Re-organized documentation into a more logical structure
    • Consolidated documentation naming around kebab-case

[2.0.0]

  • Deprecate BinaryFormatter with [Obsolete], keep functional for trusted/legacy scenarios.
  • Make GameObject JSON converter output structured JSON with name, type, and instanceId.
  • Fix stray UnityEditor imports in Runtime to ensure clean player builds.

[1.x]

  • See commit history for incremental features (random engines, spatial trees, serialization converters, editor tools).

Clone this wiki locally