Repository navigation
3.6.1
Added
- Add
AnimationEventSaveAPIto save clip events and optional frame rates from editor scripts without opening the window. See Animation Event Editor (#821). - Add
SpritePivotAdjusterAPIto find sprite textures and preview or apply center-of-mass pivots from editor scripts without opening the window. See Sprite Pivot Adjuster (#821). - Add
SpriteCropperAPIto discover and crop sprite assets, build mappings for separate cropped outputs, and preview or replace references from scripts without opening the window. Failed encoding or staging writes keep the previous PNG bytes. See Sprite Cropper (#821, #827). - Add
AnimationCreatorAPIto build sprite clips and write uniquely named animation assets from editor scripts without opening the window. See Animation Creator (#821). - Add
ImageBlurAPIto blur textures or write blurred project assets from editor scripts without opening the window. Occupied output names are preserved. See Image Blur Tool (#821, #817). - Batch sprite reference replacement asset edits and finalize one Undo record per changed object (#821).
- Add
SpriteSheetExtractionAPIto find sprite sheets and extract selected rectangles from scripts or batch mode without opening the window. Outputs appearing during extraction are skipped unless overwrite is requested. See Sprite Sheet Extractor (#821, #817). - Add
SpriteSheetReferenceReplacementAPIto preview and replace sprite references in explicit project assets from scripts. See Sprite Sheet Extractor (#821). - Add
AnimationCopierAPIto analyze, preview, copy, and clean up standalone animation clips from scripts or batch mode without opening its window. See Animation Copier (#821). - Add
FitTextureSizeAPIto preview and apply texture import sizes from scripts or batch mode without opening its window. See Fit Texture Size (#821). - Add
ProtoSchemaExporterto write selected or discovered project contracts from Editor code without opening a window. See Serialization (#821). - Add a public sprite atlas API to scan and sync folders, generate and pack atlases, and detect config drift from code or batch mode. Matching atlases are left untouched. See Sprite Atlas Generator (#821).
- Add
DurableFile.WriteAllBytesAsyncfor staged, cancellable binary saves with the same durability guarantees as synchronous byte writes. See Durable Writes for Player Data (#816). - Add an Odin migration preview/apply tool for proven-equivalent
ReadOnlyand
EnumToggleButtonsfields. Preview reports possible Odin-owned data, including quoted keys, in scenes, prefabs, and assets;
source-only edits leave that data untouched. See the
Odin Migration Guide
(#794). - Add opt-in
WUH018warnings for string==and!=comparisons whose ordinal comparison policy
is implicit. Null checks and explicit comparison APIs remain quiet. Every package-owned .NET
project enforces allWUH###policies, including the three consumer opt-ins. See
Analyzers
(#807). - Add Analyzer Policies under
Tools > Wallstop Studios > Unity Helpers. It explains every
WUH###diagnostic, enables or disables the full policy set inAssets/Default.ruleset, preserves
unrelated analyzer groups, and reports missing, mixed, duplicate, or unknown-rule drift. - Add
WallMath.TryFisherExactTestfor exact two-sided comparisons of two binary groups with
bounded work and fail-soft validation. See
Descriptive Statistics
(#742). - Add
WallMath.TryExactSignTestfor exact two-sided paired-result comparisons that exclude ties
and fail soft on invalid counts. See
Descriptive Statistics
(#742). - Add
WallMath.TryClopperPearsonIntervalfor exact equal-tailed binomial confidence bounds with
fail-soft validation. See
Descriptive Statistics
(#742). - Add stable exponential-race weighted index and no-replacement subset selection over spans, with
allocation-free caller scratch and overflow-safe cumulative double selection. See
Random Generators (#792, #781). - Add reusable named command-line parsing, RectTransform-to-BoxCollider2D synchronization, and
DPI-aware EventSystem drag thresholds. See Helper Utilities and Math and Extensions (#742). - Add
RandomSeeds.Mix64and ordered numeric or UTF-8 domain seed derivation for reproducible,
schedule-independent gameplay streams. See
Keyed Seed Derivation
(#791). - Add
PointerEventData.TryGetWorldPointandTryGetLocalPoint, which prefer raycast hits and
convert clamped screen positions across overlay, camera, and world-space canvases. See
Pointer Coordinates
(#742). - Add
Line2D.TryGetIntersectionPoint(Circle, out Vector2), which returns the first circle-boundary
hit along a segment. See
Math and Extensions
(#742). - Add
ShapeHelpercircular curves, upper-semicircle fractions, and angle-centered circular
fractions with reusable output buffers and fail-soft validation. See
Helper Utilities
(#742). - Add
NextIntSkewed, which averages uniform draws with a preferred target and clamps the result to the requested bounds. See Random Generators (#742). - Add
AuthoredAssetYaml.TryResolveObjectReference, which resolves both external and same-file Unity references without loading the asset. See Authored Asset Validation (#779). - Add
ColorContrast.Composite, which produces the opaque visible color for a translucent foreground before a contrast measurement. See Readable Text on Any Background (#777). - Add optional report context and exception handler overloads to
StartFunctionAsCoroutine, so hosted jobs can attribute or program against every failure (#778).
Improved
-
Speed up
[DetectAssetChanged]watcher initialization by finding handler methods through Unity's type cache instead of inspecting every method in loaded assemblies (#783, #818). -
Avoid a staging copy for
ICollection<T>sources inOrderBy,Ordered, andShuffled, while
keeping compact returned lists for other sources
(#781). -
Correct random reference documentation: identify
WyRandom's wyhash v1 stream, clarify
XoroShiroRandom's high-half output, and distinguish the SplitMix design from Vigna's 2015
reference implementation without attributing an unsupported published PractRand result
(#757). -
Describe
PatternDefeatingQuickSortas the pdqsort-inspired introsort it implements; it does
not include upstream pattern-breaking heuristics
(#756). -
Avoid an iterator allocation when the Animation Viewer opens or restores its
multi-file selector (#781). -
Improve editor reloads by removing additional query stages from attribute metadata discovery
(#648,
#781). -
Improve Sprite Atlas Generator refresh and source-sprite processing by removing temporary query
pipelines while preserving configuration and sprite order
(#648,
#781). -
Improve
LayeredImageconstruction by keeping measured parallel blending for multi-row sprites
while avoiding slower scheduling for single-row sprites; overflow-safe work sizing preserves the
parallel path for very large dimensions
(#781,
#782). -
Avoid Sprite Pivot parallel scheduling below 65,536 pixels and for one-row sprites, while
retaining measured parallel speedups for larger work, and reduce overhead when Pivot Adjuster
and Sprite Cropper search large asset folders
(#648,
#781,
#782). -
Avoid parallel scheduling for Image Blur passes with fewer than 256 pixels or only one
partition, reducing small-texture overhead while retaining parallel execution for larger work
(#782). -
Resolve already-loadable
SerializableTypenames before constructing the full descriptor catalog,
and avoid parallel sprite-crop scans below a conservative measured crossover
(#781,
#782). -
Reduce the slowest EditMode, PlayMode, and standalone test paths without reducing case, sample, or
parameter counts or covered production behavior
(#783). -
Format Sentinel JUnit reports sequentially, removing worker scheduling and two temporary
arrays while preserving report order (#781, #782). -
Release destroyed Unity object targets from Sentinel's central result store on the next results read without discarding diagnostic details (#669).
-
Defer SerializableType ignore-pattern match counts until the settings window displays them, avoiding a scan of every loaded type on each domain reload (#786).
-
Improve Sprite Cropper and Sprite Sheet Extractor memory reuse for dynamically sized pixel output, with measured size-aware parallel row copies for large images (#754).
-
Remove avoidable allocations from asset watcher discovery and WallstopProto source generation while preserving handler and diagnostic ordering (#764, #781).
Fixed
- Fix Sentinel suppression saves and undo leaving a partial decision file if a write fails (#827).
- Fix Texture Resizer dry runs changing the loaded image and importer settings. A preview now calculates the target size without resizing or reimporting (#821).
- Fix editor report exports leaving a partial file when writing fails. Existing Prefab Checker, Animation Copier, Method Analyzer, validation, and failed-test reports stay intact until the new report is ready (#827).
- Fix
FileHelper.CopyFileAsyncerasing an existing destination when reading or staging fails, or the copy is cancelled. See File Operations (#827). - Fix Texture Resizer and Analyzer Policies saves when the destination changes during a write (#817).
- Fix Animation Copier dry runs creating destination subfolders during copy previews.
- Fix Animation Copier's Include Unchanged in Copy All option so selected unchanged clips are actually replaced while preserving destination GUIDs.
- Fix
DurableFile.TryDeletereporting success for a directory or inaccessible target (#817). - Fix Editor startup errors when Unity Helpers loads saved project settings, including custom test output paths and pool purging options (#814).
- Fix
NextSubsetreading a lazy source when asked for zero items. It now returns empty without enumerating the source. See Random Generators (#781). - Fix plain .NET source builds of random generators and WallstopProto without the 3.6.0 upgrade workarounds. Unity builds keep their existing behavior (#815).
Install
- Import the attached
.unitypackageinto a Unity project, or - install
com.wallstop-studios.unity-helpers@3.6.1from npm / OpenUPM through Unity Package Manager.
The release includes the npm tarball and the .unitypackage, each with a .sha256 checksum.