> For the complete documentation index, see [llms.txt](https://dante-3.gitbook.io/dante-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dante-3.gitbook.io/dante-docs/modular-experience-system/getting-started/configuration.md).

# Configuration

Developer Settings, World Settings, and Asset Manager configuration.

***

## UMES\_DeveloperSettings

Editor preferences: **Editor → Preferences → Project → Modular Experience System**

```cpp
UCLASS(Config = EditorPerProjectUserSettings, DefaultConfig,
       DisplayName = "Modular Experience System")
class UMES_DeveloperSettings : public UDeveloperSettingsBackedByCVars
```

> **Note:** These settings are saved to the `EditorPerProjectUserSettings` config. Per-user and **NOT shipped with the game**.

### Properties

<figure><img src="https://4216330531-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYsGXprPiDJ68FN8HnOaN%2Fuploads%2F2M3FjV2hMQxsMEhvrGat%2Fimage.png?alt=media&amp;token=fd325135-b1f6-4b7c-bec5-1cc682314d84" alt=""><figcaption></figcaption></figure>

| Property             | Type              | Default | Category   | Description                                                                            |
| -------------------- | ----------------- | ------- | ---------- | -------------------------------------------------------------------------------------- |
| `bAutoSetup`         | `bool`            | `true`  | Auto Setup | Whether the subsystem performs automatic component injection and receiver registration |
| `ExperienceOverride` | `FPrimaryAssetId` | (empty) | Experience | Always load this experience in the editor (highest priority)                           |

### bAutoSetup

When enabled, `UModularExperienceSubsystem`:

* Adds `UModularExperienceManagerComponent` to the GameState (if not already present)
* Registers GameState, PlayerController, PlayerState, Pawn, HUD as `GameFrameworkComponentReceiver`
* Automatically resolves and loads the experience

**Disable if:**

* You manage experiences from your own GameMode
* You have custom receiver registration logic
* You are performance testing

### ExperienceOverride

For fast iteration in the editor. When set, takes priority over WorldSettings, URL, and CommandLine. Lets you test different experiences in PIE without changing the map.

> **Security:** Only effective when `GIsEditor` is true. Ignored in shipping builds.

***

## AMES\_WorldSettings

Per-map default experience definition.

```cpp
UCLASS(MinimalAPI)
class AMES_WorldSettings : public AWorldSettings
```

### Properties

| Property                    | Type              | Description                                                                    |
| --------------------------- | ----------------- | ------------------------------------------------------------------------------ |
| `DefaultGameplayExperience` | `FPrimaryAssetId` | Default experience for this map (AllowedTypes = "ModularExperienceDefinition") |

### Usage

{% stepper %}
{% step %}
Set `WorldSettingsClassName` in `DefaultEngine.ini`:

```ini
[/Script/Engine.Engine]
WorldSettingsClassName=/Script/ModularExperienceSystem.MES_WorldSettings
```

{% endstep %}

{% step %}
The **Default Gameplay Experience** field becomes visible in each map's **World Settings** panel
{% endstep %}
{% endstepper %}

### GetDefaultGameplayExperience

```cpp
FPrimaryAssetId GetDefaultGameplayExperience() const;
```

### Editor Check

```cpp
#if WITH_EDITOR
virtual void CheckForErrors() override;
#endif
```

Validates whether the experience reference is valid during Map Check.

***

## UMES\_AssetManager

Custom Asset Manager — synchronous loading and cache support.

```cpp
UCLASS()
class UMES_AssetManager : public UAssetManager
```

### Setup

```ini
[/Script/Engine.Engine]
AssetManagerClassName=/Script/ModularExperienceSystem.MES_AssetManager
```

### Static Methods

| Method                       | Description                           |
| ---------------------------- | ------------------------------------- |
| `Get()`                      | Singleton access                      |
| `ShouldLogAssetLoads()`      | Whether asset load logging is enabled |
| `SynchronousLoadAsset(Path)` | Synchronous asset loading             |

### Template Methods

#### GetAsset\<T>

```cpp
template <typename AssetType>
static AssetType* GetAsset(const TSoftObjectPtr<AssetType>& AssetPointer, bool bKeepInMemory = true);
```

Loads an asset from a soft pointer. If `bKeepInMemory=true`, the asset is protected from GC.

#### GetSubclass\<T>

```cpp
template <typename AssetType>
static TSubclassOf<AssetType> GetSubclass(const TSoftClassPtr<AssetType>& AssetPointer, bool bKeepInMemory = true);
```

Loads a class from a soft class pointer.

***

## Asset Manager Registration (DefaultGame.ini)

Experience system assets must be defined in `DefaultGame.ini` to be discoverable:

### Experience Definition

```ini
+PrimaryAssetTypesToScan=(PrimaryAssetType="ModularExperienceDefinition",
    AssetBaseClass="/Script/ModularExperienceSystem.ModularExperienceDefinition",
    bHasBlueprintClasses=True,
    bIsEditorOnly=False,
    Directories=((Path="/Game")),
    Rules=(Priority=-1,ChunkId=-1,bApplyRecursively=True,CookRule=AlwaysCook))
```

### User Facing Experience

```ini
+PrimaryAssetTypesToScan=(PrimaryAssetType="MES_UserFacingExperience",
    AssetBaseClass="/Script/ModularExperienceSystem.MES_UserFacingExperience",
    bHasBlueprintClasses=False,
    bIsEditorOnly=False,
    Directories=((Path="/Game")),
    Rules=(Priority=-1,ChunkId=-1,bApplyRecursively=True,CookRule=AlwaysCook))
```

> **bHasBlueprintClasses:** `True` for Experience Definition (so Blueprint subclasses are also discovered), `False` for User Facing Experience (data asset only).

***

## Project Setup Checker

`FMES_ProjectSetupChecker` — Detects missing settings when the editor first opens.

Checked settings:

* `DefaultGame.ini` Asset Manager registrations
* `DefaultEngine.ini` WorldSettings class
* `DefaultEngine.ini` AssetManager class

`SMES_SetupStatusPanel` — Slate panel embedded in Developer Settings. Shows ✓/✗ status for each setting and offers automatic fixes via an "Apply & Restart" button.

***

## DefaultEngine.ini Summary

```ini
[/Script/Engine.Engine]
; MES WorldSettings — per-map experience definition
WorldSettingsClassName=/Script/ModularExperienceSystem.MES_WorldSettings

; Optional: MES AssetManager — cache and synchronous loading
AssetManagerClassName=/Script/ModularExperienceSystem.MES_AssetManager
```

## DefaultGame.ini Summary

```ini
[/Script/Engine.AssetManagerSettings]
; Experience Definition discovery
+PrimaryAssetTypesToScan=(PrimaryAssetType="ModularExperienceDefinition",AssetBaseClass="/Script/ModularExperienceSystem.ModularExperienceDefinition",bHasBlueprintClasses=True,bIsEditorOnly=False,Directories=((Path="/Game")),SpecificAssets=(),Rules=(Priority=-1,ChunkId=-1,bApplyRecursively=True,CookRule=AlwaysCook))

; User Facing Experience discovery
+PrimaryAssetTypesToScan=(PrimaryAssetType="MES_UserFacingExperience",AssetBaseClass="/Script/ModularExperienceSystem.MES_UserFacingExperience",bHasBlueprintClasses=False,bIsEditorOnly=False,Directories=((Path="/Game")),SpecificAssets=(),Rules=(Priority=-1,ChunkId=-1,bApplyRecursively=True,CookRule=AlwaysCook))
```
