Project Setup & Integration
Before diving into the features, let’s get the Ultimate Menu System properly integrated into your project. This system is designed to be lightweight, modular, and fully adaptable — but it does require some setup to function as intended.
We’ll walk through how to migrate the assets, set up your GameInstance, and get your levels organized. No worries — this only takes a few minutes, and I’ll guide you through every step.
Migrating to Your Project
Let’s start by bringing the system into your project:
- Open the Content Browser in your existing project.
- Locate the UltimateMenu folder in the sample project.
- Right-click the folder and choose Migrate.
- When prompted, select your target project’s Content folder.
- After the migration is complete, open your project and confirm the folder is now visible.
Now that the assets are in place, let’s set up the GameInstance — which is the brain of how this system handles menu logic and level transitions.
Game Instance Setup
If you already have a custom GameInstance, don’t worry — you don’t have to replace it. Instead, you’ll just copy over what matters.
Here’s how to do that:
- Open your existing GameInstance Blueprint.
- In the Class Settings, add the interface called Interface_UMS_GameInstance.
- Now, open BP_GameInstance from the Ultimate Menu System folder.
- Copy all the logic from its Event Graph.
- Pay close attention to the Event Init — avoid overwriting your own initialization logic.
- In your GameInstance, right-click any missing variables and choose Promote to Variable to recreate them.
- Copy over any blue-colored functions (pure functions or interface functions).
- Finally, make sure your level loading, return-to-main, and save/load calls are routed through your updated GameInstance.
Level Structure
This menu system uses a streamed loading pattern to avoid freezing during transitions.
Here’s the structure:
- GameLevel – Persistent level (should be empty)
- PlayLevel – Your actual gameplay level (added as a streamed level)
In your Blueprints:
- First open GameLevel
- Then stream PlayLevel using Blueprint
- Set your Game Mode to start players as Spectators — this prevents characters from falling before the level fully loads
You’ll find Open Level calls already wired in the sample GameInstance — just match your own level names accordingly.
Player Controller Setup
Your Player Controller only needs minor setup to work with the menu system:
- Open your Player Controller class.
- Add the interface: Interface_GamePlayerController.
- Implement the required interface functions.
- You can use PC_GameController as a reference — feel free to copy-paste and adapt logic from there.
That’s it! The Player Controller integration should now be fully functional.
What’s Next?
Now that the system is migrated and configured, you’re ready to start working with the core systems — like saving/loading progress and hosting multiplayer sessions.
In the next section, we’ll dive into the Save, Load, and Multiplayer systems, so you can get your game data persistent and ready for online play.