Options Manager
The singleton options controller — holds the active Input Profile and provides runtime configuration data to game systems.
Categories:

Image showing the Options Manager component, as seen in the Entity Inspector.
Overview
The Options Manager is the central anchor of the Options system. It holds the active Input Profile data asset and provides it to Input Readers and other game systems that need runtime configuration data.
As a Manager, it is spawned by the Game Manager and participates in the standard two-stage initialization lifecycle.
How It Works
- The Options Manager initializes during the Game Manager’s startup sequence.
- It loads the configured Input Profile data asset.
- Input Readers across the game query the Options Manager for the active profile via
OptionsManagerIncomingEventBus. - The Options Manager responds to standby events — pausing and resuming input processing when the game enters or exits standby mode.
Setup

Image showing the Manager wrapper entity set as Editor-Only inside Prefab Edit Mode.
- Create an entity. Attach the GS_OptionsManagerComponent to it.
- Assign your Input Profile data asset.
- Turn the entity into a prefab.
- Enter prefab edit mode. Set the wrapper entity (parent) to Editor Only. Save.
- Delete the Options Manager entity from the level.
- In the Game Manager prefab, add the Options Manager
.spawnableto the Startup Managers list.
Inspector Properties
| Property | Type | Default | Description |
|---|---|---|---|
| Input Profile | AZ::Data::Asset<GS_InputProfile> | None | The active Input Profile data asset. Input Readers across the game will use this profile for event-to-binding mappings. |
API Reference
Request Bus: OptionsManagerIncomingEventBus
Singleton bus — call via Broadcast.
| Method | Parameters | Returns | Description |
|---|---|---|---|
GetActiveInputProfile | — | AZ::Data::Asset<GS_InputProfile> | Returns the currently active Input Profile data asset. Called by Input Readers on activation. |
Lifecycle Events (from GameManagerOutgoingEventBus)
| Event | Description |
|---|---|
OnStartupComplete | The Options Manager is fully ready. Input Readers can now query for the active profile. |
OnEnterStandby | Pause input processing. |
OnExitStandby | Resume input processing. |
Usage Examples
Getting the Active Input Profile
#include <GS_Core/GS_CoreBus.h>
AZ::Data::Asset<GS_Core::GS_InputProfile> profile;
GS_Core::OptionsManagerIncomingEventBus::BroadcastResult(
profile,
&GS_Core::OptionsManagerIncomingEventBus::Events::GetActiveInputProfile
);
if (profile.IsReady())
{
// Use the profile to look up bindings, check group states, etc.
}
Extending the Options Manager
Extend the Options Manager when you need additional runtime settings (graphics quality, audio levels, accessibility), custom options persistence, or platform-specific configuration.
Header (.h)
#pragma once
#include <Source/OptionsSystem/GS_OptionsManagerComponent.h>
namespace MyProject
{
class MyOptionsManagerComponent
: public GS_Core::GS_OptionsManagerComponent
{
public:
AZ_COMPONENT_DECL(MyOptionsManagerComponent);
static void Reflect(AZ::ReflectContext* context);
protected:
void OnStartupComplete() override;
private:
float m_masterVolume = 1.0f;
int m_graphicsQuality = 2; // 0=Low, 1=Med, 2=High
};
}
Implementation (.cpp)
#include "MyOptionsManagerComponent.h"
#include <AzCore/Serialization/SerializeContext.h>
namespace MyProject
{
AZ_COMPONENT_IMPL(MyOptionsManagerComponent, "MyOptionsManagerComponent", "{YOUR-UUID-HERE}",
GS_Core::GS_OptionsManagerComponent);
void MyOptionsManagerComponent::Reflect(AZ::ReflectContext* context)
{
if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
{
serializeContext->Class<MyOptionsManagerComponent, GS_Core::GS_OptionsManagerComponent>()
->Version(0)
->Field("MasterVolume", &MyOptionsManagerComponent::m_masterVolume)
->Field("GraphicsQuality", &MyOptionsManagerComponent::m_graphicsQuality);
if (AZ::EditContext* editContext = serializeContext->GetEditContext())
{
editContext->Class<MyOptionsManagerComponent>(
"My Options Manager", "Extended options with audio and graphics settings")
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
->Attribute(AZ::Edit::Attributes::Category, "MyProject")
->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC_CE("Game"))
->DataElement(AZ::Edit::UIHandlers::Slider,
&MyOptionsManagerComponent::m_masterVolume, "Master Volume", "Global audio volume")
->Attribute(AZ::Edit::Attributes::Min, 0.0f)
->Attribute(AZ::Edit::Attributes::Max, 1.0f)
->DataElement(AZ::Edit::UIHandlers::ComboBox,
&MyOptionsManagerComponent::m_graphicsQuality, "Graphics Quality", "Rendering quality preset");
}
}
}
void MyOptionsManagerComponent::OnStartupComplete()
{
// Apply saved options on startup
// ... load from save system and apply settings ...
GS_OptionsManagerComponent::OnStartupComplete();
}
}
Module Registration
m_descriptors.insert(m_descriptors.end(), {
MyProject::MyOptionsManagerComponent::CreateDescriptor(),
});
See Also
- Input Options — Input Readers and the Input Profile system
- Input Profiles — Data asset for input binding configuration
- Game Manager — Top-level lifecycle controller
- Manager — Base class lifecycle pattern