Skip to content

Release 2.0.0

Latest

Choose a tag to compare

@CoderGamester CoderGamester released this 26 Apr 15:47
18cfd93

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