Skip to content

Releases: CoderGamester/Unity-Services

Release 2.1.0

20 May 16:13
989a210

Choose a tag to compare

New:

  • VersionServices now auto-bootstraps via [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)], populating version metadata before any scene Awake callback and before vendor-SDK SubsystemRegistration callbacks that read it. Consumers no longer need to call LoadVersionData() / LoadVersionDataAsync() explicitly for the default flow.

Changed:

  • Property getters (VersionInternal, Branch, Commit, BuildNumber) now lazy-load via a new private EnsureLoaded() on first access if the auto-bootstrap hook has not yet fired — protects against undefined ordering between sibling assemblies' [RuntimeInitializeOnLoadMethod] callbacks at the same phase.
  • Removed the private IsLoaded() helper (replaced by EnsureLoaded() invoked from each property getter).

Docs:

  • docs/version-services.md rewritten around the new auto-bootstrap contract: the recommended usage no longer includes any explicit load call, the lazy-load fallback is documented, and the Error Reference table now describes the fallback behaviour (no exception is raised).

Full Changelog: 2.1.0...2.1.0

Release 2.0.2

20 May 15:38
971e854

Choose a tag to compare

What's Changed

Fixed:

  • Add missing meta file

Full Changelog: 2.0.1...2.0.2

Release 2.0.1

20 May 15:32
8dfa1d3

Choose a tag to compare

What's Changed

New

  • Added new test suite for more rebust code coverage
  • Added VersionServices.LoadVersionData() — synchronous sibling of LoadVersionDataAsync() for consumers who want to populate version metadata at boot without an await. Both methods now funnel into a shared private ApplyTextAsset helper, so behaviour is identical. Sync is the recommended default for the shipping version-data.txt (a few hundred bytes); async remains available for cases where VersionData is extended with large embedded blobs. Covered by Tests/EditMode/Unit/VersionServicesSyncLoadTest.cs.

Fixed:

  • Tests/AGENTS.md §8 extended with a new "Authorized reflection sites (storage-assertion exception)" subsection.

Full Changelog: 2.0.0...2.0.1

Release 2.0.0

26 Apr 15:47
18cfd93

Choose a tag to compare

What's Changed

New:

  • Added Services Explorer window (Tools > GameLovers > Services Explorer) with 13 live-refresh tabs: Overview, Installer, MessageBroker, Tick, Coroutine, Pool, Data, Time, RNG, AssetResolver, Versioning, Assets Importer, Addressable Ids — works in both Edit and Play mode
  • Menu stubs under Tools > GameLovers:
    • Versioning / Refresh Version Data and Versioning / Open in Explorer
    • Assets Importer / Import Assets Data and Assets Importer / Open in Explorer
    • Addressable Ids / Generate Addressable Ids and Addressable Ids / Open in Explorer
  • Added Assets > Create > GameLovers Services > … scaffolders: Message, Command, Service, Pool Entity (template-based, $NAME$ / $NAMESPACE$ substitution)
  • Absorbed com.gamelovers.assetsimporter v0.5.2 into this package
  • Added IAssetLoader, ISceneLoader, AddressablesAssetLoader to Runtime/AssetsImporter/ (ns GameLovers.Services.AssetsImporter)
  • Added AddressableConfig, AssetConfigsScriptableObject<TId,TAsset>, AssetLoaderUtils, AssetReferenceScene to Runtime/AssetsImporter/ (ns GameLovers.Services.AssetsImporter)
  • Added AssetResolverService (implements IAssetResolverService / IAssetAdderService) to Runtime/ root (ns GameLovers.Services)
  • Added Editor/AssetsImporter/: AssetsImporter, AssetsToolImporter, AssetConfigsImporter, AddressableIdsGenerator, AddressablesIdGeneratorSettings (ns GameLovers.Services.AssetsImporter.Editor)
  • Added importable Samples under Samples~/ (importable via Unity Package Manager > GameLovers Services > Samples).
    • Services Playground — single-scene, zero-setup walk-through that wires every foundation service via MainInstaller and exercises 10 of 13 Services Explorer tabs end-to-end.
    • Asset Resolver — focused demo of AssetResolverService end-to-end (AddConfigs / RequestAsset / UnloadAssets) with SpriteConfigs : AssetConfigsScriptableObject<SpriteId, Sprite>. Drives the three Services Explorer tabs the Playground does not cover (Asset Resolver, Assets Importer, Addressable Ids).

Changed:

  • Addressable Ids generator and Assets Importer settings moved from Assets/*.asset ScriptableObjects to ProjectSettings/ ScriptableSingletons (mirrors VersioningEditorSettings).
  • Generation logic extracted from AddressableIdsGenerator into AddressableIdsGeneratorUtils (static internal); importer discovery/import logic extracted into AssetsImporterEditorUtils.
  • Tools/Assets Importer/* and Tools/AddressableIds Generator/* menu entries removed. Use Tools/GameLovers/Assets Importer/..., Tools/GameLovers/Addressable Ids/..., or the Services Explorer tabs instead.
  • Toggle Auto Import On Refresh menu entry removed. The toggle now lives exclusively in the Services Explorer Assets Importer tab.
  • Assets/AssetsImporter.asset and Assets/AddressablesIdGeneratorSettings.asset are no longer used (settings moved to ProjectSettings/); safe to delete from consumer projects.
  • Deleted editor source files: AssetsImporter.cs, AssetsToolImporter.cs, AddressableIdsGenerator.cs, AddressablesIdGeneratorSettings.cs.
  • Folder reorganization: Runtime/ now has domain subfolders DependencyInjection/, Commands/, Pooling/, AssetsImporter/; Editor/ now has Versioning/ and AssetsImporter/ subfolders
  • Installer.cs and MainInstaller.cs moved to Runtime/DependencyInjection/ (namespace unchanged: GameLovers.Services)
  • CommandService.cs trimmed to concrete class only; command contract interfaces extracted to Runtime/Commands/ under ns GameLovers.Services.Commands
  • PoolService.cs trimmed to concrete class only; pool interfaces + implementations moved to Runtime/Pooling/ under ns GameLovers.Services.Pooling
  • ObjectPool.cs (578 lines, 10 types) split into 4 files under Runtime/Pooling/: IPoolEntity.cs, IObjectPool.cs, ObjectPool.cs, GameObjectPool.cs
  • VersionEditorUtils.cs and GitEditorProcess.cs moved to Editor/Versioning/; re-namespaced from GameLovers.Services.EditorGameLovers.Services.Versioning.Editor
  • Added new hard dependencies: com.unity.addressables (1.21.20) and com.cysharp.unitask (2.5.10)

Fixed:

  • AddressablesAssetLoader.UnloadAsset no longer calls GC.Collect(), GC.WaitForPendingFinalizers(), or Resources.UnloadUnusedAssets(). The method now only decrements the Addressables reference count. The old implementation caused PlayMode Test Runner crashes on macOS and O(total-assets-in-memory) main-thread stalls per per-asset release. Callers that need memory reclamation should invoke Resources.UnloadUnusedAssets() themselves at appropriate moments (scene transitions, boot, memory-pressure events); Unity also runs an unused-assets sweep automatically on LoadSceneMode.Single scene loads.
  • Corrected IAssetLoader.UnloadAsset XML documentation: removed the incorrect "will also destroy GameObject instances" claim — Addressables.Release(gameObject) does not destroy the instance; callers must Object.Destroy it separately.
  • IAsyncCoroutine.StopCoroutine(bool triggerOnComplete) now honors its triggerOnComplete parameter and flips IsCompleted to true and IsRunning to false after stopping. The previous implementation always invoked OnComplete callbacks regardless of the flag and left state flags unchanged, so consumers could not distinguish a stopped coroutine from a running one and triggerOnComplete: false was silently ignored.
  • GameObjectPool.Dispose() and GameObjectPool<T>.Dispose() now skip pooled entries whose underlying GameObject has already been destroyed by an external owner (e.g. a parent GameObject was destroyed while pooled instances were still reparented under it via DespawnToSampleParent).

Breaking Changes — see MIGRATION.md for details:

  • Pool types moved from GameLovers.Services to GameLovers.Services.Pooling (IPoolService, IObjectPool, IObjectPool<T>, ObjectPool<T>, ObjectPoolBase<T>, GameObjectPool, GameObjectPool<T>, IPoolEntitySpawn, IPoolEntitySpawn<T>, IPoolEntityDespawn, IPoolEntityObject<T>). PoolService concrete class remains in GameLovers.Services.
  • Command contract types moved from GameLovers.Services to GameLovers.Services.Commands (IGameCommandBase, IGameCommand<>, IGameServerCommand<>, ICommandService<>). CommandService<> concrete class remains in GameLovers.Services.
  • GameLovers.AssetsImporter.* renamed to GameLovers.Services.AssetsImporter.*
  • GameLovers.AssetsImporter.AssetResolverService is now GameLovers.Services.AssetResolverService
  • GameLovers.Services.Editor.* (versioning editor) renamed to GameLovers.Services.Versioning.Editor.*
  • IAssetLoader.UnloadAssetAsync<T>(T, Action)IAssetLoader.UnloadAsset<T>(T, Action): method renamed (dropped Async suffix) and return type changed from UniTask to void to reflect its synchronous nature. Replace await loader.UnloadAssetAsync(x); with loader.UnloadAsset(x);.
  • Code generated by AddressableIdsGenerator must be re-generated (updated emitted using statement)

Full Changelog: 1.0.1...2.0.0

Release 1.0.1

14 Jan 23:27
ec6964f

Choose a tag to compare

Changed:

  • Updated dependency com.gamelovers.dataextensions to com.gamelovers.gamedata
  • Updated assembly definitions to reference GameLovers.GameData

Full Changelog: 1.0.1...1.0.1

Release 1.0.0

11 Jan 23:53
9f02bca

Choose a tag to compare

New:

  • Added AGENTS.md document to help guide AI coding assistants to understand and work with this package library
  • Added an entire test suit of unit/integration/performance/smoke tests to cover all the code for all services in this package

Changed:

  • Changed VersionServices namespace from GameLovers to GameLovers.Services to maintain consistency with other services in the package.
  • Made CallOnSpawned, CallOnSpawned<TData>, and CallOnDespawned methods virtual in ObjectPoolBase<T> to allow derived pool classes to customize lifecycle callback behavior.

Fixed:

  • Fixed the README.md file to now follow best practices in OSS standards for Unity's package library projects
  • Fixed linter warnings in VersionServices.cs (redundant field initialization, unused lambda parameter, member shadowing)
  • Fixed GameObjectPool not invoking IPoolEntitySpawn.OnSpawn() and IPoolEntityDespawn.OnDespawn() on components attached to spawned GameObjects.

Full Changelog: 1.0.0...1.0.0

Release 0.15.1

24 Sep 13:03
cd816d1

Choose a tag to compare

What's Changed

New:

  • Added protected property for all private fields in CommandService for access to any game-specific project inheritance

Full Changelog: 0.15.0...0.15.1

0.15.0

05 Jan 21:50
9cf72f8

Choose a tag to compare

What's Changed

New:

  • Added StartDelayCall method to ICoroutineService to allow deferred methods to be safely executed within the bounds of a Unity Coroutine
  • Added the possibility to know the current state of an IAsyncCoroutine
  • Added the access to the Sample Entity used to generete new entites within an IObjectPool and destroy it when disposing the object pool
  • Added the possibility to reset an IObjectPool to a new state

Full Changelog: 0.14.1...0.15.0

Release 0.14.1

30 Nov 16:45
79a3c51

Choose a tag to compare

What's Changed

Fixed:

  • Fixed the RngLogic.Range(float, float, bool) method to allow having the same min and max values with maxInclusive set to true

Full Changelog: 0.14.0...0.14.1

Release 0.14.0

15 Nov 18:00
ee0c43e

Choose a tag to compare

What's Changed

New:

  • Added PublishSafe method to IMessageBrokerService to allow publishing messages safely in chase of chain subscriptions during publishing of a message

Changed:

  • Subscribe and Unsubscribe throw an InvalidOperationException when being executed during a message being published

Fixed:

  • CoroutineTests issues running when building released projects

Full Changelog: 0.13.2...0.14.0