Archived on 2026-10-24. This is a historical implementation note, not current setup instructions or an active task list. Original claims, code examples, file paths, and completion statements have not all been revalidated. Use the current documentation and issue register for maintenance decisions.
Splash Screen Implementation Guide¶
Overview¶
The splash screen system has been completely redesigned to use DOTween instead of Unity's built-in system. It provides a seamless, animated transition from the bootloader to the main menu.
What Was Changed¶
1. AppStartupEvents.cs¶
- Added
AllTasksCompletedevent to signal when all startup tasks are finished - Added
ReportAllTasksCompleted()method to trigger the event - Added
StartLoadingMainMenuevent to signal when MainMenu scene should start loading - Added
ReportStartLoadingMainMenu()method to trigger the event
2. AppInitiator.cs¶
- Updated
RunStartupFlow()to fireStartLoadingMainMenuevent afterLoadSettingsFirstTime()completes - This ensures all managers and settings are properly initialized before loading MainMenu scene
- Fires
AllTasksCompletedevent after all tasks finish - This signals the splash screen that it's safe to show "Press Any Button To Start"
3. SplashUIController.cs (Complete Rewrite)¶
- Removed: Slider and Animator dependencies
- Added: DOTween-based animation system
- Features:
- Logo sequence with fade in/out animations
- Skip logos by pressing any button
- Background loading of MainMenu scene (only after managers are ready)
- "Press Any Button To Start" text with pulse animation
- Seamless transition with land background sliding down
- Game logo fade in after transition
- Automatic unloading of boot scene
How It Works¶
Flow Sequence¶
- Startup Phase
- Logo sequence starts immediately
- Startup tasks run in parallel (Steam, services, SaveManager, GameSettings)
- After LoadSettingsFirstTime completes, MainMenu scene loads in background (additive, not activated)
-
This ensures all managers are ready before MainMenu scene loads
-
Logo Phase
- Each logo fades in (0.5s), displays (2.5s), fades out (0.5s)
- User can skip by pressing any button
-
Logos are displayed in order they appear in the array
-
Waiting Phase
- System waits for all startup tasks to complete
-
Once complete, shows "Press Any Button To Start" with pulse animation
-
Transition Phase (on button press)
- Fade out "Press Any Button To Start" (0.5s)
- Land background slides down with speed effect (1.5s, Ease.InCubic)
- MainMenu scene activates
- Game logo fades in (1s)
- Boot scene unloads
- MenuController takes over
Scene Setup Required¶
Boot Scene¶
You need to set up the following UI elements in your Boot scene:
- Canvas - Full-screen canvas for splash screen
- Logo Images (Image[] logoImages)
- Array of Image components for studio/publisher logos
- Assign in Inspector in desired display order
-
Can be 0 or more logos
-
Game Logo (Image gameLogo)
- Main game logo that appears after transition
-
Position must match the logo position in MainMenu scene for seamless effect
-
Land Background (RectTransform landBackgroundTransform)
- The background that slides down during transition
- Should be positioned at the top of the screen initially
-
Will slide down by Screen.height pixels
-
Press Any Key Text (TextMeshProUGUI pressAnyKeyText)
- Text component with message "Press Any Button To Start"
-
Use CanvasGroup (pressAnyKeyCanvasGroup) for fade control
-
Logos Canvas Group (CanvasGroup logosCanvasGroup)
- Parent CanvasGroup for all logos to control their visibility
Inspector Settings¶
Assign these in the Inspector for SplashUIController:
[Header("Logo Images")]
logoImages: Image[] - Array of studio/publisher logos
gameLogo: Image - Main game logo (matches MainMenu position)
[Header("Background Elements")]
landBackground: Image - The land background image
landBackgroundTransform: RectTransform - Transform of land background
[Header("UI Elements")]
pressAnyKeyText: TextMeshProUGUI - "Press Any Button To Start" text
logosCanvasGroup: CanvasGroup - Controls logo visibility
pressAnyKeyCanvasGroup: CanvasGroup - Controls press any key text visibility
[Header("Timing Settings")]
logoDisplayTime: 2.5f - How long each logo displays
logoFadeDuration: 0.5f - Fade in/out duration for logos
landSlideDuration: 1.5f - Duration of land background slide
gameLogoFadeDuration: 1f - Duration of game logo fade in
pressAnyKeyFadeDuration: 0.5f - Duration of press any key text fade
[Header("Scene Settings")]
mainMenuSceneName: "MainMenu" - Name of your main menu scene
MainMenu Scene¶
- Game Logo Position
- Must match the gameLogo position in Boot scene
-
This creates the seamless transition effect
-
MenuController
- The system will automatically find and hand control to MenuController
- No changes needed to MenuController
Key Features¶
Logo Skipping¶
- Press any button during logo sequence to skip remaining logos
- System immediately proceeds to wait for task completion
Proper Initialization Order¶
- MainMenu scene loads ONLY after LoadSettingsFirstTime completes
- This ensures all managers (AchievementManager, ShopManager, CollectionManager, InputManager, LocalizationManager, SaveManager) are properly initialized
- Menu UI controllers can safely access managers when scene activates
Background Loading¶
- MainMenu scene loads asynchronously in background after managers are ready
- No waiting for scene load during transition
- Smooth, uninterrupted experience
DOTween Animations¶
- All animations use DOTween for smooth, professional feel
- Custom easing functions:
Ease.OutQuadfor fade in (smooth start and end)Ease.InQuadfor fade out (smooth start and end)Ease.InCubicfor land slide (speed effect - slow start, fast end)Ease.InOutSinefor pulse animation
Scene Management¶
- Uses additive scene loading for seamless transition
- Boot scene automatically unloads after transition
- No memory leaks or orphaned scenes
Timing Customization¶
Adjust timing in Inspector for different feels:
- Faster feel: Reduce logoDisplayTime to 1.5-2.0s
- Slower feel: Increase logoDisplayTime to 3.0-4.0s
- Quicker transition: Reduce landSlideDuration to 1.0s
- Dramatic transition: Increase landSlideDuration to 2.0s
Debugging¶
Check Console for these log messages:
- [AppInitiator] Startup begin - Startup flow started
- [AppInitiator] Startup complete - All tasks finished
- [SplashUIController] MainMenu scene loaded and ready - Scene loaded
- [SplashUIController] All tasks completed - Ready for button press
- [SplashUIController] Logo sequence skipped - User skipped logos
- [SplashUIController] Starting transition to menu - Transition started
- [SplashUIController] MainMenu scene activated - Scene now visible
- [SplashUIController] Boot scene unloaded - Cleanup complete
- [SplashUIController] MenuController found and will handle the menu - Handoff complete
Common Issues¶
Scene Not Loading¶
- Ensure scene name in Inspector matches actual scene name exactly
- Check that MainMenu scene is in Build Settings
Logos Not Showing¶
- Assign Image components to logoImages array
- Ensure logos are active and visible in hierarchy
Transition Not Working¶
- Verify landBackgroundTransform is assigned
- Check that land background has proper RectTransform setup
- Ensure both Boot and MainMenu scenes have game logo at same position
"Press Any Button" Not Appearing¶
- Check that AppInitiator fires AllTasksCompleted event
- Verify pressAnyKeyText and pressAnyKeyCanvasGroup are assigned
Future Enhancements¶
Possible additions: - Add loading progress bar during task completion - Support for multiple background transitions - Custom easing curves for more control - Sound effects for logo transitions - Support for different controller inputs