Skip to content

Releases: Ambiguous-Interactive/unity-helpers

3.6.0

Choose a tag to compare

@github-actions github-actions released this 12 Sep 19:19
08de791

Added

  • Add WallMath.Median, Percentile, Mean and StandardDeviation over IReadOnlyList<float>, <double>, <int> and <long>, sorting pooled copies so the caller's list is never reordered. See Descriptive Statistics (#742).
  • Add SpriteHelpers.RotateTexture90, RotateTexture180 and ExtractSpriteRect, which produce new textures and leave the source untouched, returning null with a logged reason instead of throwing on unreadable or write-protected textures. See Helper Utilities (#742).
  • Add Objects.Sha256Hex for text (UTF-8) and byte payloads, and Objects.TrySha256HexOfFile, which reports a missing or unreadable file with false instead of throwing. The sprite sheet tooling's private file hash now calls it. See SHA-256 Digests (#742).
  • Add EditorUtilities.IsInvokedByTestRunner(), so an editor window can skip fixture-consuming OnEnable work during a test run instead of re-deriving it. Answers false rather than throwing where the command line is unreadable, and replaces seven private copies. See Editor Utilities (#742).
  • Fix ColorExtensions averaging (GetAverageColor, dominant and weighted variants) reading channel-swapped pixels from ARGB32 and BGRA32 textures through the raw fast path; those formats now take the same GetPixels32 path as every other format (#749).
  • Enforce one member ordering across the codebase: const, events, delegates, static properties, static fields, properties, fields, constructors, static methods, methods, nested types last, each tier public → protected → internal → private including const. npm run lint:nested-type-placement enforces it (#672).
  • Add a JesseSort adaptation with linear monotone-input handling and contiguous pile storage, credited to Jesse Lew. See JesseSort (#747).
  • Add runtime-length exclusion arrays to NextEnumExcept for interface and concrete generators. See Random Generators (#742).
  • Add BitOps, a public home for popcount, trailing zero count, floor log2, highest-bit isolation, power-of-two detection and power-of-two ceiling; the private copies in BitSet, ImmutableBitSet, the sorters and the sprite/enum tools now call it. See Helper Utilities (#742).
  • Add reusable protobuf read limits for encoded bytes, length-delimited fields, tag counts, nesting and cumulative packed-element counts across nested messages. See Serialization (#647).
  • Add reusable JSON read limits for nesting, per-container element counts and string or property-name lengths, with a parameterless constructor for generic factories. New Serializer.JsonDeserialize overloads refuse an over-budget document before decoding it. See Serialization (#647).
  • Add WUH017 warnings for a same-object GetComponent compared against null, where TryGetComponent answers the same question without Unity's Editor allocation. See Analyzers (#741).
  • Add opt-in exact sprite-art colliders, reusable alpha-mask reading and pixel-boundary tracing, with alpha and minimum-area controls. See Sprite Colliders (#715).
  • Add editor-only sprite keyframe times and threshold-based last-motion detection, with renderer-path filtering and selectable bounds edges. See Sprite Animation Motion (#717).
  • Add cross-assembly WallstopProto subtypes with static dispatch, inherited private-member support, and collision checks at compilation, project assembly and startup (#612).
  • Add malformed-state checks to WallstopProto raw remainder reads; failed reads leave an empty span and preserve the reader position (#647).
  • Add unbounded retention, custom key comparers and opt-in removal ownership transfer to Cache<TKey, TValue>. Shared cache limits now resize existing entries immediately (#703).
  • Add WUH015 warnings for invalid Unity callback signatures and WUH016 warnings for hidden inherited callbacks, using resolved types and inheritance (#654).
  • Add Helpers.ClearTagCache(), which drops every cached Helpers.Find(tag) lookup. A miss costs one GameObject.FindGameObjectWithTag (#643).
  • Add Buffers.ComparerPoolMaxDistinctEntries, which bounds how many distinct comparers the set and dictionary pool caches retain; the least recently used is evicted past it. See Comparer-Keyed Pools (#689).
  • Add StringWrapper.MaxCachedWrappers and StringWrapper.CachedCount, which bound and report how many distinct strings the wrapper cache retains; the least recently requested is evicted past it (#694).
  • Add SerializableTypeCatalog.MaxCachedFilterResults, which bounds how many distinct type-picker search terms are cached; the least recently used is evicted past it (#694).
  • Add PoolTypeResolver.MaxCachedTypeNames, which bounds how many distinct type-name spellings the pool type resolver retains (#643).
  • Add PoolStatistics.ApproximatelyEquals(other, tolerance), matching the overload PoolFrequencyStatistics already carries now that Equals is exact (#639).
  • Add RestorableGlobal<T>, which lends a global for a using block and takes it back exactly once, at any nesting depth and in any disposal order, so a copied scope can no longer restore a stale value. WUH014 reports the disposable structs that still assign in Dispose. See Restorable Globals (#627).
  • Add Tools > Wallstop Studios > Unity Helpers > Run EditMode/PlayMode Tests With Summary, which starts a test run and writes a pollable summary file to Temp/ for a script driving the editor from outside. See Test Run Reporter (#625).
  • Ship four validation rules with the package -- unfilled [WNotNull] slots, broken serializable dictionaries, empty animation keyframes, and script files that misname what they bind -- so the Asset Validation window and CI batch mode have something to check out of the box. See Asset Validation (#675).
  • Extend WUH003 to is null and is not null on a UnityEngine.Object. Both are CLR null tests, so a destroyed object reads as alive exactly as it does through ?.. A type pattern is not reported, because it is not a null test at all. See Analyzers (#621).
  • Add Tools > Wallstop Studios > Unity Helpers > Authored Assets, reports for a type nothing can author, an unfilled [WNotNull] slot, a SerializableDictionary that lost its pairing, and an empty keyframe. Reading is never destructive. A file a scan cannot read is named. See Authored Asset Validation (#618, #619, #620, #624, #631, #670).
  • Add Report Stale Serialized Keys and Repair Stale Serialized Keys In Selection, for keys an asset still records that n...
Read more

3.5.1

Choose a tag to compare

@github-actions github-actions released this 12 Jul 21:33
3dfa354

Fixed

  • Unity license lock handoff after CI cleanup: final Unity license returns now emit fail-closed cleanup proof to the organization build lock. Cleanup is bounded and non-masking, failed or cancelled acquisitions still release queued/owned lock state, and only a successful return command or exact allowlisted Unity responses permit the activation slot to enter cooldown instead of quarantine.

Install

  • Import the attached .unitypackage into a Unity project, or
  • install com.wallstop-studios.unity-helpers@3.5.1 from npm / OpenUPM through Unity Package Manager.

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

3.5.0

Choose a tag to compare

@github-actions github-actions released this 07 Jul 21:49
81b9064

Added

  • Asset change detection loop reset utility: Added AssetChangeDetectionUtility.ResetLoopProtection() so editor tooling can resume [DetectAssetChanged] dispatch after a recursive callback has tripped loop protection, without requiring a domain reload.
  • Feel-good randomness helpers: Added ExactAveragePrd, BadLuckProtection, and WeightedShuffleBag<T> for player-facing randomness that reduces streak frustration while keeping deterministic, testable behavior. ExactAveragePrd solves the pseudo-random distribution coefficient for a configured long-run average, BadLuckProtection implements pity-timer chance ramps and optional hard guarantees, and WeightedShuffleBag<T> emits exact weighted ticket counts before repeating. The helpers expose explicit restore APIs so save/load systems can persist pity/deck state.

Fixed

  • Optional Odin Inspector integration without unguarded Odin assemblies: RuntimeSingleton<T>, ScriptableObjectSingleton<T>, and AttributeEffect now use Odin serialized base classes only when the odininspector package is installed and the package-owned WALLSTOP_UNITY_HELPERS_ODIN_INSPECTOR define is active; otherwise they fall back to Unity base classes. Projects that still define the global ODIN_INSPECTOR symbol without shipping Sirenix assemblies no longer fail package compilation, while Odin projects keep the serialized base behavior automatically.

Install

  • Import the attached .unitypackage into a Unity project, or
  • install com.wallstop-studios.unity-helpers@3.5.0 from npm / OpenUPM through Unity Package Manager.

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

3.4.0

Choose a tag to compare

@github-actions github-actions released this 05 Jul 02:29
e6143da

See the roadmap for details

Added

  • AssetDatabaseBatchHelper.EnsureAssetFolder / EnsureAssetParentFolder: batch-safe helpers that register every missing folder segment with the AssetDatabase (never via raw disk, which can leave the database out of sync and spawn numbered duplicate folders) and pause any open StartAssetEditing batch first, so a subsequent AssetDatabase.CreateAsset cannot fail with "Parent directory must exist".

Changed

  • [WValueDropDown] provider-misconfiguration is now logged as a Warning, not an Error: a null/empty/missing/throwing or wrong-return-type dropdown value provider is a handled condition — the dropdown falls back to an empty option list — so WValueDropDownAttribute / DropDownValueProvider now log these diagnostics at Warning severity instead of Error. The message text is unchanged. This better reflects that the feature degrades gracefully, and (as a side effect) stops these editor-tooling diagnostics from failing PlayMode tests that incidentally exercise the dropdown path.
  • DirectoryHelper.EnsureDirectoryExists no longer logs an error before throwing: passing a path outside Assets/ in the editor previously emitted a Debug.LogError and threw an ArgumentException (a redundant double signal that polluted the console and could fail unrelated tests that did not expect the log). It now throws the ArgumentException only, and the exception message names the offending path (for example, Cannot create directory 'SomeFolder/SubFolder' outside the Assets folder: AssetDatabase only manages paths under 'Assets/'.). Callers that already catch the exception are unaffected; callers that relied on the console log should read the thrown exception instead.

Fixed

  • Unity 6000.3 compatibility for runtime helpers: Object.GetUnityObjectId, UnityObjectExtensions.FindObjectsOfTypeShim, SceneHelper.EnsureOneComponent, and the Rigidbody2D velocity helpers now gate Unity 6 APIs by the specific version that introduced them instead of treating every Unity 6000.x editor as equivalent. Unity 6000.3 and earlier supported matrix versions compile through the older overloads while Unity 6000.4+ continues to use the newer no-sort object lookup and EntityId.ToULong paths.
  • EffectHandler periodic catch-up after a long frame: missed periodic ticks now advance on their scheduled interval instead of sliding from the current frame, and unlimited periodic effects are capped per update so a large frame hitch cannot monopolize the player loop. Remaining due ticks continue catching up on subsequent updates.
  • Protobuf abstract-root deserialization reporting corrupt data instead of a registration error: abstract [ProtoContract] roots without [ProtoInclude] metadata now require an explicit RegisterProtobufRoot mapping before deserialize, so ambiguous abstract roots fail with the documented type-resolution exception instead of falling through to protobuf-net's version-specific corrupt-data / constructor errors. Explicit registrations also take precedence over abstract root heuristics.
  • Background logging using a stale Unity main-thread capture: WallstopStudiosLogger now shares UnityMainThreadGuard's captured main-thread state, preventing background log calls from being misclassified after test/player lifecycle resets.
  • Protobuf serialization of an EMPTY SerializableHashSet / SerializableSortedSet / SerializableDictionary / SerializableSortedDictionary throwing SerializationInputException ("data is empty") on deserialize: an empty collection serializes to a zero-byte payload (the wrapper carries only repeated fields), but ProtoDeserialize ran its generic empty-payload guard before the collection-wrapper interception, so a valid empty collection could not round-trip. The collection interception now runs first, so an empty collection round-trips to an empty collection; the empty-payload guard still rejects empty input for ordinary (non-collection) message types. Wire format for non-empty payloads is unchanged.
  • Serialization crashing or silently corrupting data on IL2CPP/AOT standalone players: Serializer now serializes the affected types through AOT-safe paths instead of protobuf-net's reflection / Reflection.Emit model, which under IL2CPP hit the unsupported GetTypeModifiers icall or bound immutable structs to empty values. Deque<T>, CyclicBuffer<T>, and SparseSet route through plain array/scalar protobuf wrappers (also fixing a spurious [ProtoAfterDeserialization] ArgumentOutOfRangeException); FastVector2Int, FastVector3Int, ImmutableBitSet, and Parabola route through mutable protobuf surrogates. Serializer.JsonStringify / JsonSerialize of anonymous types (and other types lacking a public parameterless constructor) now use a reflection-light writer instead of System.Text.Json's parameterized-constructor converter, which has no AOT code under IL2CPP. A package link.xml preserves the serialization assemblies. JSON output and protobuf round-trip values are unchanged on mono / editor. The package pre-registers the common element specializations (int, long, float, double, bool, string, Vector2, Vector3, Vector2Int, Vector3Int, FastVector2Int, FastVector3Int); consumers that store a custom value-type element in a Deque<T> or CyclicBuffer<T> must register that T for AOT themselves (reference-type elements share a single generic specialization and need no registration).
  • Relational component attributes ([SiblingComponent] / [ChildComponent] / [ParentComponent]) crashing or resolving the wrong components on IL2CPP/AOT players: the collection fast-path built a runtime generic accessor via Expression.Compile(), which IL2CPP cannot service (it threw at runtime). It now uses the AOT-safe non-generic GetComponents / GetComponentsInChildren / GetComponentsInParent(Type, …) overloads. Include-inactive filtering also wrongly treated every component as enabled on IL2CPP (a reflection delegate path that silently failed), so disabled components were not filtered out; the enabled state is now read AOT-safely. Behavior on mono / editor is unchanged.
  • [WNotNull] validation (this.CheckForNulls()) silently doing nothing in player builds: the null check was compiled only into the editor, so it never threw ArgumentNullException for a null [WNotNull] field in a built player. It now runs in every build (AOT-safe) exactly as the API documents, so missing required references fail fast at runtime instead of being silently ignored.
  • [ValidateAssignment] validation (this.ValidateAssignments()) silently doing nothing in player builds: like CheckForNulls, the warning pass was compiled only into the editor (while the sibling AreAnyAssignmentsInvalid already ran everywhere), so unassigned fields were never reported in a built player. It now runs in every build (AOT-safe), consistent with AreAnyAssignmentsInvalid.
  • ScriptableObjectSingleton assets not regenerating on Unity 6 after the asset file was deleted: when a singleton's .asset was removed but its .meta remained, Unity 6000.3+ retains the path-to-GUID mapping, which ScriptableObjectSingletonCreator treated as "path already occupied" and skipped recreation. Creation decisions now key on the asset body file, so the singleton is recreated on every Unity version.
  • AssetDatabase.CreateAsset failing with "Parent directory must exist" / "Creating asset at path … failed": editor utilities that create assets — ScriptableObjectSingletonCreator, ScriptableObjectSingletonMetadataUtility, AttributeMetadataCacheGenerator, PersistentDirectorySettings, and the sprite/atlas/animation creator windows — now ensure the parent folder is registered with the AssetDatabase before creating the asset, including while an AssetDatabase batch is open (common under -batchmode). Previously, creating an asset in a not-yet-registered folder could fail or be skipped.
  • Unity 6 deprecation warnings from Object.FindObjectsOfType / FindObjectOfType: runtime DI-integration code (Reflex / VContainer / Zenject) now routes object lookups through a version-gated shim that uses FindObjectsByType / FindFirstObjectByType on Unity 2022.2+ (including Unity 6) and the legacy API below it, eliminating the deprecation warnings while preserving behavior.
  • MonoBehaviour.ExecuteFunctionAfterFrame callback never firing in headless/batch mode: the helper yielded WaitForEndOfFrame, which never resumes under -batchmode -nographics (no end-of-frame render signal), so the queued callback was silently dropped on headless players, dedicated servers, and CI. It now advances a single frame in batch mode (the headless-safe equivalent) and continues to use WaitForEndOfFrame in interactive/graphical sessions, so the callback runs in every environment.

Install

  • Import the attached .unitypackage into a Unity project, or
  • install com.wallstop-studios.unity-helpers@3.4.0 from npm / OpenUPM through Unity Package Manager.

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

3.3.0

Choose a tag to compare

@github-actions github-actions released this 08 May 21:50
bb15a67

Changelog

Added

  • Failed Tests Exporter: New editor utility that hooks into the Unity Test Runner to automatically capture test failures and export them to timestamped text files
    • Automatically records test name, failure message, and stack trace for each failed test
    • Configurable output directory with a visual folder picker — defaults to the project root if not set
    • Path validation on every use: falls back to the project root if the configured directory is missing, invalid, or outside the project
    • Menu items under Tools > Wallstop Studios > Unity Helpers to export or clear captured failures
    • Disabled by default — enable via Project Settings > Wallstop Studios > Unity Helpers

Fixed

  • Editor asset import-loop pressure from unchanged metadata saves: ScriptableObjectSingletonMetadata and AttributeMetadataCache now skip SetDirty / SaveAssets work when regenerated metadata is unchanged. This prevents initialize-on-load and explicit singleton ensure passes from repeatedly re-saving identical assets during Unity test runs or editor refreshes, reducing the chance of Unity's "infinite import loop" detector tripping on native runs.
  • AssetPostprocessorDeferral dedup regressing structurally-equal-but-distinct drains: AssetPostprocessorDeferral.Schedule now dedups pending drains via ReferenceEquals instead of List<Action>.Contains (which invokes Delegate.Equals). The prior structural-equality behavior silently coalesced two distinct delegates that shared the same Method+Target -- common when a local helper returns a lambda that captures only outer-method variables -- so a self-rescheduling drain could be dropped entirely. Matches the documented intent in the AssetPostprocessor safety skill and is pinned by the new ScheduleStructurallyEqualButDistinctDelegatesAreNotDeduplicated regression test
  • WButton conflict warnings hidden in collapsed foldouts: Fixed group conflict warnings (placement, priority, and draw order) not rendering when foldout groups are collapsed. Conflict warnings now render in the group header area regardless of foldout expansion state, and warning cache population is validated across collapsed, expanded, and always-open foldout behavior.
  • Spurious "SendMessage cannot be called..." warnings from asset processors: Eliminated spurious "SendMessage cannot be called during Awake, CheckConsistency, or OnValidate" warnings from DetectAssetChangeProcessor and related editor processors (LlmArtifactCleaner, SpriteLabelProcessor) by deferring callback invocation out of Unity's asset-import phase via a shared AssetPostprocessorDeferral helper backed by EditorApplication.delayCall. The prior synchronous path called AssetDatabase.LoadAllAssetsAtPath / GetComponentsInChildren / user callbacks during the import phase, which triggered Unity's internal sprite/renderer lifecycle relays and produced per-import warning storms. A new opt-out setting (Project Settings > Wallstop Studios > Unity Helpers > Detect Asset Changes, option Defer Post-process Callbacks, default on) restores the old synchronous behavior for users who require it. (#234)
  • Pool auto-purge throttle dropping real purges: Fixed WallstopGenericPool<T>.PurgeInternalCore letting the 1-second MinAutoPurgeIntervalSeconds throttle block MaxPoolSize enforcement. A Rent/Return that advanced _lastAutoPurgeTime on a healthy-pool scan would block a subsequent same-tick call that pushed the pool past MaxPoolSize, silently skipping the CapacityExceeded purge and dropping the matching OnPurge notification. The throttle now has two orthogonal rules: (1) when the pool is observably over MaxPoolSize, the throttle is bypassed entirely so a burst of returns cannot accumulate beyond capacity within a single clock tick; (2) otherwise the throttle still rate-limits scans (preserving the O(1) amortized fast path for healthy pools under contention). The multithreaded variant also guards the timestamp advance with CAS max-semantics so concurrent out-of-order writes cannot regress the throttle clock. Applies to both the multithreaded and SINGLE_THREADED pool variants
  • Pool performance regression from O(n) usage tracking: Fixed RollingHighWaterMark (used by pool purge system) performing O(n) operations on every pool rent/return, causing 100x slowdowns under sustained load. Replaced List<Sample> with CyclicBuffer<Sample> for O(1) add/remove, added incremental running sum for O(1) average computation, and added a monotonic deque for O(1) amortized peak tracking. Previously, 100K rent/return cycles took 20+ seconds; now completes within 200ms budget
  • TexturePlatformOverrideEntryDrawer render-phase mutations: Fixed OnGUI writing to SerializedProperty values every frame without BeginChangeCheck/EndChangeCheck guards. Direct assignments like apply.boolValue = EditorGUI.ToggleLeft(...) and nameProp.stringValue = EditorGUI.TextField(...) dirtied the SerializedObject on every repaint, corrupting undo history. Also removed a redundant render-phase writeback of the computed display label to the platform name property
  • TexturePlatformOverrideEntryDrawer GenericMenu undo and Custom handling: Fixed GenericMenu callback not calling Undo.RecordObjects before mutation and not handling the "Custom" menu option. Selecting "Custom" from the dropdown now correctly sets the platform name to string.Empty (triggering custom mode), and all selections are undoable
  • SourceFolderEntryDrawer render-phase mutation: Fixed EnumFlagsField for selection mode writing to modeProp.intValue every frame without a BeginChangeCheck/EndChangeCheck guard
  • AttributeMetadataCache generator path mismatch: Fixed AttributeMetadataCacheGenerator.GetOrCreateCache() using hardcoded asset paths that did not match the [ScriptableSingletonPath("Wallstop Studios/Unity Helpers")] attribute on AttributeMetadataCache. The generator was creating and loading the cache asset from Assets/Resources/Wallstop Studios/ instead of the correct Assets/Resources/Wallstop Studios/Unity Helpers/ path, causing cache generation to silently fail when the singleton was already loaded at the correct path
  • IntDropDown invalid value handling: Fixed IntDropDownDrawer to properly handle property values that fall outside the configured options. Invalid values (values not in the options array) are now preserved without modification during render and clearly displayed with an "(Invalid)" suffix. Previously, invalid values were displayed as-is without any visual indication. The UI Toolkit IntDropDownSelector.GetDefaultValue() now returns the first option instead of 0
  • Linux dropdown rendering phantom rows: Replaced all EditorGUI.Popup usage with GenericMenu-based dropdowns to eliminate phantom empty rows when selected index is -1 on Linux. Affected drawers: WValueDropDownDrawer, IntDropDownDrawer, StringInListDrawer, TexturePlatformOverrideEntryDrawer (standard variants), and WValueDropDownOdinDrawer, IntDropDownOdinDrawer, StringInListOdinDrawer (Odin Inspector variants). Odin drawers now always use GenericMenu regardless of the page limit setting, since GenericMenu handles all list sizes correctly without the rendering issues that required the threshold (#209)
  • Multi-object editing for WValueDropDown: Added typed SerializedProperty setters for Unity-native types (Vector2, Vector3, Vector4, Color, Rect, Bounds, Quaternion, AnimationCurve, Hash128, and their Int variants) in WValueDropDownDrawer.ApplyOption to avoid the reflection fallback for known property types. The generic reflection path now iterates over all serializedObject.targetObjects for proper multi-object editing support instead of only updating the first selected object
  • SerializableSet undo not working for add, clear, sort, and commit operations: Fixed TryClearSet, TryAddNewElement, TryCommitPendingEntry, AppendNullPlaceholderEntry, and TrySortElements in SerializableSetPropertyDrawer not calling Undo.FlushUndoRecordObjects() after direct object mutation. These methods used Undo.RecordObjects to snapshot pre-change state but never finalized the undo record, causing Undo.PerformUndo() to silently do nothing
  • GUIContent GC pressure in drawer OnGUI: Fixed per-frame GUIContent allocations in IntDropDownDrawer.DrawGenericMenuDropDown and PoolTypeConfigurationDrawer.OnGUI that created avoidable garbage collection pressure in the Inspector. Both drawers now reuse static GUIContent instances (consistent with WValueDropDownDrawer and StringInListDrawer which already followed this pattern)

Pull Requests

Read more

3.2.1

Choose a tag to compare

@wallstop wallstop released this 27 Feb 02:51
c922594

Changelog

Fixed

  • WValueDropDown empty rows in dropdown: Fixed WValueDropDown and StringInList dropdowns showing empty/blank rows at the top of the dropdown list, particularly on Linux. Clamped invalid -1 selected indices to 0 in WValueDropDownDrawer and StringInListDrawer, and hardened dropdown display logic to replace empty labels with descriptive fallback text (#209)
  • Dropdown display label normalization: Fixed search, filter, suggestion, and selected-value display in WValueDropDown, StringInList, and popup dropdown windows not applying the (Option N) fallback label consistently, causing items with empty display labels to be unsearchable and the wrong option to appear selected (#213)

Pull Requests

Contributors

@Copilot, Dependabot (@dependabot)[bot], Eli Pinkerton (@wallstop), copilot-swe-agent[bot] and dependabot[bot]

3.2.0

Choose a tag to compare

@wallstop wallstop released this 15 Feb 02:40
c400a15

Changelog

Fixes

  • Animation Creator creating corrupted animations
  • "Destroying assets is not permitted to avoid data loss" on Asset Domain Reload issue

Pull Requests

Contributors

@Copilot, Eli Pinkerton (@wallstop) and copilot-swe-agent[bot]

3.1.8

Choose a tag to compare

@github-actions github-actions released this 07 Feb 21:00

Changelog

Fixed

  • Unity 6.3 unsigned package warning: Added "signature": "unsigned" field to package.json to explicitly mark the package as unsigned for Unity 6.3+. This prevents Unity from showing a warning that the package is missing a signature. The change is backwards compatible with older Unity versions and works with OpenUPM, npm, and git URL installations.
  • WGroup not working in Unity 6000.x: Fixed WGroup attributes not rendering in Unity 6 by using named parameter syntax for CustomEditor attribute's editorForChildClasses parameter. This change is backward compatible with Unity 2022 and earlier versions.

Pull Requests

Contributors

@Copilot, Dependabot (@dependabot)[bot], @github-actions[bot], Eli Pinkerton (@wallstop), copilot-swe-agent[bot], dependabot[bot] and github-actions[bot]

3.1.7

Choose a tag to compare

@github-actions github-actions released this 01 Feb 05:02
5da6a5b

Changelog

Pull Requests

Contributors

Dependabot (@dependabot)[bot], Eli Pinkerton (@wallstop) and dependabot[bot]

3.1.6

Choose a tag to compare

@github-actions github-actions released this 26 Jan 17:05
23c10b6

Changelog

Fixed

  • Banner SVG Issues: Various issues relating to Unity Helpers banner SVG rendering
  • Documentation nested list rendering: Fixed GitHub Pages rendering where nested bullet lists appeared flat without proper indentation (#175)
  • Documentation too self-congratulatory: Toned down the documentation to be more realistic and less LLM-speak

Pull Requests

Contributors

Dependabot (@dependabot)[bot], Eli Pinkerton (@wallstop) and dependabot[bot]