Skip to content

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 AllTasksCompleted event to signal when all startup tasks are finished
  • Added ReportAllTasksCompleted() method to trigger the event
  • Added StartLoadingMainMenu event to signal when MainMenu scene should start loading
  • Added ReportStartLoadingMainMenu() method to trigger the event

2. AppInitiator.cs

  • Updated RunStartupFlow() to fire StartLoadingMainMenu event after LoadSettingsFirstTime() completes
  • This ensures all managers and settings are properly initialized before loading MainMenu scene
  • Fires AllTasksCompleted event 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

  1. Startup Phase
  2. Logo sequence starts immediately
  3. Startup tasks run in parallel (Steam, services, SaveManager, GameSettings)
  4. After LoadSettingsFirstTime completes, MainMenu scene loads in background (additive, not activated)
  5. This ensures all managers are ready before MainMenu scene loads

  6. Logo Phase

  7. Each logo fades in (0.5s), displays (2.5s), fades out (0.5s)
  8. User can skip by pressing any button
  9. Logos are displayed in order they appear in the array

  10. Waiting Phase

  11. System waits for all startup tasks to complete
  12. Once complete, shows "Press Any Button To Start" with pulse animation

  13. Transition Phase (on button press)

  14. Fade out "Press Any Button To Start" (0.5s)
  15. Land background slides down with speed effect (1.5s, Ease.InCubic)
  16. MainMenu scene activates
  17. Game logo fades in (1s)
  18. Boot scene unloads
  19. MenuController takes over

Scene Setup Required

Boot Scene

You need to set up the following UI elements in your Boot scene:

  1. Canvas - Full-screen canvas for splash screen
  2. Logo Images (Image[] logoImages)
  3. Array of Image components for studio/publisher logos
  4. Assign in Inspector in desired display order
  5. Can be 0 or more logos

  6. Game Logo (Image gameLogo)

  7. Main game logo that appears after transition
  8. Position must match the logo position in MainMenu scene for seamless effect

  9. Land Background (RectTransform landBackgroundTransform)

  10. The background that slides down during transition
  11. Should be positioned at the top of the screen initially
  12. Will slide down by Screen.height pixels

  13. Press Any Key Text (TextMeshProUGUI pressAnyKeyText)

  14. Text component with message "Press Any Button To Start"
  15. Use CanvasGroup (pressAnyKeyCanvasGroup) for fade control

  16. Logos Canvas Group (CanvasGroup logosCanvasGroup)

  17. 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
  1. Game Logo Position
  2. Must match the gameLogo position in Boot scene
  3. This creates the seamless transition effect

  4. MenuController

  5. The system will automatically find and hand control to MenuController
  6. 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.OutQuad for fade in (smooth start and end)
  • Ease.InQuad for fade out (smooth start and end)
  • Ease.InCubic for land slide (speed effect - slow start, fast end)
  • Ease.InOutSine for 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