Skip to content

3.6.1

Choose a tag to compare

@github-actions github-actions released this 21 Sep 05:34
· 98 commits to main since this release
097193e

Added

  • Add AnimationEventSaveAPI to save clip events and optional frame rates from editor scripts without opening the window. See Animation Event Editor (#821).
  • Add SpritePivotAdjusterAPI to find sprite textures and preview or apply center-of-mass pivots from editor scripts without opening the window. See Sprite Pivot Adjuster (#821).
  • Add SpriteCropperAPI to 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 AnimationCreatorAPI to build sprite clips and write uniquely named animation assets from editor scripts without opening the window. See Animation Creator (#821).
  • Add ImageBlurAPI to 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 SpriteSheetExtractionAPI to 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 SpriteSheetReferenceReplacementAPI to preview and replace sprite references in explicit project assets from scripts. See Sprite Sheet Extractor (#821).
  • Add AnimationCopierAPI to analyze, preview, copy, and clean up standalone animation clips from scripts or batch mode without opening its window. See Animation Copier (#821).
  • Add FitTextureSizeAPI to preview and apply texture import sizes from scripts or batch mode without opening its window. See Fit Texture Size (#821).
  • Add ProtoSchemaExporter to 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.WriteAllBytesAsync for 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 ReadOnly and
    EnumToggleButtons fields. 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 WUH018 warnings for string == and != comparisons whose ordinal comparison policy
    is implicit. Null checks and explicit comparison APIs remain quiet. Every package-owned .NET
    project enforces all WUH### 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 in Assets/Default.ruleset, preserves
    unrelated analyzer groups, and reports missing, mixed, duplicate, or unknown-rule drift.
  • Add WallMath.TryFisherExactTest for exact two-sided comparisons of two binary groups with
    bounded work and fail-soft validation. See
    Descriptive Statistics
    (#742).
  • Add WallMath.TryExactSignTest for exact two-sided paired-result comparisons that exclude ties
    and fail soft on invalid counts. See
    Descriptive Statistics
    (#742).
  • Add WallMath.TryClopperPearsonInterval for 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.Mix64 and ordered numeric or UTF-8 domain seed derivation for reproducible,
    schedule-independent gameplay streams. See
    Keyed Seed Derivation
    (#791).
  • Add PointerEventData.TryGetWorldPoint and TryGetLocalPoint, 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 ShapeHelper circular 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 in OrderBy, Ordered, and Shuffled, 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 PatternDefeatingQuickSort as 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 LayeredImage construction 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 SerializableType names 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.CopyFileAsync erasing 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.TryDelete reporting 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 NextSubset reading 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 .unitypackage into a Unity project, or
  • install com.wallstop-studios.unity-helpers@3.6.1 from npm / OpenUPM through Unity Package Manager.

The release includes the npm tarball and the .unitypackage, each with a .sha256 checksum.