Release 1.1.0
What's Changed
New:
- Added
OpenUiSetAsync(int setId, CancellationToken)method toIUiServicefor opening all UI presenters in a set with proper address handling, ensuring compatibility withCloseAllUiSetandUnloadUiSet - Added
OnOpenTransitionCompleted()andOnCloseTransitionCompleted()lifecycle hooks toUiPresenterfor reacting after all transition animations/delays complete - Added comprehensive test suite:
- Unit tests for
UiAnalytics,UiConfig,UiInstanceId,UiServiceCore,UiSetConfig - PlayMode integration tests for multi-instance, loading, open/close, and UI set management
- Performance and smoke tests
- Feature-specific tests for
AnimationDelayFeature,TimeDelayFeature, andPresenterFeatureBase
- Unit tests for
- Added
ITransitionFeatureinterface for features that provide open/close transition delays - Added
OpenTransitionTaskandCloseTransitionTaskpublic properties onUiPresenterfor awaiting transition completion externally - Added
AGENTS.mddocumentation for AI coding agents - Added structured documentation under
docs/folder with separate pages for getting started, core concepts, API reference, advanced topics, and troubleshooting - Added multiple new samples to the package library
- Added multiple
IUiAssetLoaderimplementations to support different asset loading scenarios:AddressablesUiAssetLoader(default): Integration with Unity Addressables.PrefabRegistryUiAssetLoader: Simple loader for direct prefab references (useful for testing and samples).ResourcesUiAssetLoader: Support for loading from Unity'sResourcesfolder.
- Added
AddressablesUiConfigs,ResourcesUiConfigs,PrefabRegistryUiConfigs,ResourcesUiConfigsEditor,AddressablesUiConfigsEditorandPrefabRegistryUiConfigsEditorfor managing UI configurations.
Changed:
- BREAKING: Made
UiConfigsclassabstractto enforce usage of specialized subclasses (AddressablesUiConfigs,ResourcesUiConfigs,PrefabRegistryUiConfigs) and prevent runtime errors from misconfiguration - BREAKING: Removed
IPresenterFeatureinterface; features now extendPresenterFeatureBasedirectly - BREAKING: Renamed
UiAssetLoadertoAddressablesUiAssetLoaderto reflect its specific loading mechanism. - BREAKING: Renamed
UiConfig.AddressableAddresstoUiConfig.Addressfor loader-agnosticism - Changed
UiPresenter<T>.Dataproperty to have a public setter that automatically triggersOnSetData()when assigned - Refactored
TimeDelayFeatureandAnimationDelayFeatureto no longer callgameObject.SetActive(false)directly; visibility is now controlled solely byUiPresenter - Refactored
UiPresenter.InternalOpen()andInternalClose()to use internal async processes that awaitITransitionFeaturetasks - Refactored
AnimationDelayFeatureandTimeDelayFeatureto usePresenter.NotifyOpenTransitionCompleted()andPresenter.NotifyCloseTransitionCompleted()instead of internal events - Removed
OnOpenCompletedEventandOnCloseCompletedEventinternal events from delay features - Updated all samples to use UI buttons instead of input system dependencies for better project compatibility
Fixed:
- Fixed
AnimationDelayFeatureanimation playback logic - was incorrectly checking!_introAnimationClipinstead of_introAnimationClip != null - Fixed
UiPresenterEditorplay-mode buttons to properly callInternalOpen()andInternalClose()instead of just togglinggameObject.SetActive() - Fixed delay features to work correctly when tests run together (UniTaskCompletionSource lifecycle)
- Fixed null checks in delay features using explicit null comparisons instead of null-conditional operators for Unity object compatibility
- Fixed inconsistent lifecycle where
OnOpenTransitionCompleted/OnCloseTransitionCompletedwere only called when features existed - Fixed split responsibility for visibility control where both
UiPresenterand features could callSetActive(false), allowing now to properly close the presenters in all scenarios - Fixed
LoadUiAsyncvisibility state inconsistency where calling it on an already-visible presenter withopenAfter=falsewould disable the GameObject but not updateVisiblePresenters, causing subsequentOpenUiAsynccalls to fail silently - Fixed multi-instance ambiguity when calling
Close(destroy: true)from within a presenter and now correctly unloads the specific instance instead of potentially unloading the wrong one - Fixed UI Toolkit timing issue where element queries in
OnInitialized()would fail because the visual tree was not yet attached to a panel
Full Changelog: 1.0.0...1.1.0