/ue-game-features
Use this skill when working with Game Feature plugins, modular gameplay, GameFeatureAction, GameFeatureData, GameFrameworkComponentManager, init state system, experience system, modular components, UPawnComponent, UControllerComponent, UGameStateComponent, UPlayerStateComponent,
$ npx -y skills add quodsoler/unreal-engine-skills --skill ue-game-features --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/ue-game-features
Context preview
The summary Claude sees to decide when to auto-load this skill.
Use this skill when working with Game Feature plugins, modular gameplay, GameFeatureAction, GameFeatureData, GameFrameworkComponentManager, init state system, experience system, modular components, UPawnComponent, UControllerComponent, UGameStateComponent, UPlayerStateComponent,
SKILL.md
ue-game-features.SKILL.mdname: ue-game-features
description: "Use this skill when working with Game Feature plugins, modular gameplay, GameFeatureAction, GameFeatureData, GameFrameworkComponentManager, init state system, experience system, modular components, UPawnComponent, UControllerComponent, UGameStateComponent, UPlayerStateComponent, or Lyra-style modular architecture. See references/ for code templates and experience system patterns."
metadata:
version: 1.0.0
UE Game Features and Modular Gameplay
You are an expert in Unreal Engine's Game Features plugin system and modular gameplay architecture.
Context Check
Read `.agents/ue-project-context.md` before proceeding. Determine:
- Whether the `GameFeatures` and `ModularGameplay` plugins are enabled
- Which actors register as component receivers (`AddReceiver`)
- Whether the project uses an init state system or experience-based loading
- Existing `UGameFeatureAction` subclasses or modular component base classes
Information Gathering
Ask the developer: 1. Are you creating a new Game Feature plugin or extending an existing one? 2. What components or abilities should the feature inject into gameplay actors? 3. Does the feature need async loading or runtime activation/deactivation? 4. Is there an experience/game mode composition system (Lyra-style)? 5. Do components need ordered initialization across features?
---
Game Feature Plugin Structure
A Game Feature plugin is a standard UE plugin with `Type` set to `"GameFeature"` in its `.uplugin` descriptor. This tells the engine to manage its lifecycle through the Game Features subsystem rather than loading it as a regular plugin.
.uplugin Descriptor
{
"Type": "GameFeature",
"BuiltInInitialFeatureState": "Active", // or "Registered", "Installed"
"Plugins": [
{ "Name": "GameFeatures", "Enabled": true },
{ "Name": "ModularGameplay", "Enabled": true }
]
}`BuiltInInitialFeatureState` controls how far the plugin advances on startup. Use `"Active"` for always-on features, `"Registered"` for features activated by gameplay code, or `"Installed"` for downloadable content loaded on demand.
UGameFeatureData
Each Game Feature plugin contains a `UGameFeatureData` primary data asset (extends `UPrimaryDataAsset`) that defines what the feature does:
// From GameFeatureData.h
UPROPERTY(EditDefaultsOnly, Instanced, Category = "Game Feature | Actions")
TArray<TObjectPtr<UGameFeatureAction>> Actions;
UPROPERTY(EditAnywhere, Category = "Game Feature | Asset Manager")
TArray<FPrimaryAssetTypeInfo> PrimaryAssetTypesToScan;
`Actions` is the core — an instanced array of `UGameFeatureAction` subclasses that execute when the feature activates.
Directory Convention
Plugins/GameFeatures/
├── ShooterCore/
│ ├── ShooterCore.uplugin (Type: GameFeature)
│ ├── Content/
│ │ └── ShooterCore.uasset (UGameFeatureData)
│ └── Source/ShooterCoreRuntime/
└── DeathmatchRules/
├── DeathmatchRules.uplugin
└── Content/DeathmatchRules.uasset---
Plugin State Machine
Game Feature plugins transition through a well-defined state machine. Actions fire at specific transitions and runtime activation must target valid destination states.
EGameFeaturePluginState Lifecycle
Uninitialized → Terminal → UnknownStatus → StatusKnown
→ Installed → Registered → Loaded → ActiveEach major state has transition states between them (e.g., `Registering`, `Loading`, `Activating`). You target a destination state and the subsystem walks the chain.
Destination States
| State | Description | |-------|-------------| | `Terminal` | Plugin removed from tracking entirely | | `StatusKnown` | Availability confirmed (exists on disk or bundle) | | `Installed` | Files on local storage, not yet registered | | `Registered` | Assets registered with Asset Manager, actions notified | | `Loaded` | Assets loaded into memory | | `Active` | Actions fully activated, components injected |
URL protocols: `file:` for built-in disk plugins, `installbundle:` for downloadable features. Convert descriptor path to URL with `UGameFeaturesSubsystem::GetPluginURL_FileProtocol(Path)`.
---
UGameFeatureAction
`UGameFeatureAction` (`UCLASS(MinimalAPI, DefaultToInstanced, EditInlineNew, Abstract)`) is the base class for all actions. `DefaultToInstanced` + `EditInlineNew` allow instances to be created inline within `UGameFeatureData`'s `Actions` array.
Lifecycle Methods
// Registration phase
virtual void OnGameFeatureRegistering();
virtual void OnGameFeatureUnregistering();
// Loading phase
virtual void OnGameFeatureLoading();
virtual void OnGameFeatureUnloading();
// Activation — primary override point
virtual void OnGameFeatureActivating(FGameFeatureActivatingContext& Context);
virtual void OnGameFeatureActivating(); // legacy no-arg fallback
// Post-activation confirmation
virtual void OnGameFeatureActivated();
// Deactivation — supports async via context
virtual void OnGameFeatureDeactivating(FGameFeatureDeactivatingContext& Context);
`OnGameFeatureActivating(Context)` is the primary override. The base calls the legacy no-arg version for backward compatibility.
Async Deactivation
When deactivation requires async work, pause it via the context:
void UMyAction::OnGameFeatureDeactivating(FGameFeatureDeactivatingContext& Context)
{
FSimpleDelegate ResumeDelegate = Context.PauseDeactivationUntilComplete(
TEXT("MyAction_AsyncCleanup"));
// Start async work — MUST invoke ResumeDelegate when done or deactivation hangs
AsyncTask(ENamedThreads::GameThread, [ResumeDelegate]()
{
// ... cleanup ...
ResumeDelegate.ExecuteIfBound();
});
}See `references/game-feature-patterns.md` for complete custom action subclass templates.
---
Built-in Actions
UGameFeatureAction_AddComponents
`UCLASS(MinimalAPI, meta=(DisplayName="Add Components"), final)`. The most commonl
Read more
name: ue-game-features description: "Use this skill when working with Game Feature plugins, modular gameplay, GameFeatureAction, GameFeatureData, GameFrameworkComponentManager, init state system, experience system, modular components, UPawnComponent, UControllerComponent, UGameStateComponent, UPlayerStateComponent, or Lyra-style modular architecture. See references/ for code templates and experience system patterns." metadata: version: 1.0.0
UE Game Features and Modular Gameplay
You are an expert in Unreal Engine's Game Features plugin system and modular gameplay architecture.
Context Check
Read `.agents/ue-project-context.md` before proceeding. Determine:
- Whether the `GameFeatures` and `ModularGameplay` plugins are enabled
- Which actors register as component receivers (`AddReceiver`)
- Whether the project uses an init state system or experience-based loading
- Existing `UGameFeatureAction` subclasses or modular component base classes
Information Gathering
Ask the developer: 1. Are you creating a new Game Feature plugin or extending an existing one? 2. What components or abilities should the feature inject into gameplay actors? 3. Does the feature need async loading or runtime activation/deactivation? 4. Is there an experience/game mode composition system (Lyra-style)? 5. Do components need ordered initialization across features?
---
Game Feature Plugin Structure
A Game Feature plugin is a standard UE plugin with `Type` set to `"GameFeature"` in its `.uplugin` descriptor. This tells the engine to manage its lifecycle through the Game Features subsystem rather than loading it as a regular plugin.
.uplugin Descriptor
{
"Type": "GameFeature",
"BuiltInInitialFeatureState": "Active", // or "Registered", "Installed"
"Plugins": [
{ "Name": "GameFeatures", "Enabled": true },
{ "Name": "ModularGameplay", "Enabled": true }
]
}`BuiltInInitialFeatureState` controls how far the plugin advances on startup. Use `"Active"` for always-on features, `"Registered"` for features activated by gameplay code, or `"Installed"` for downloadable content loaded on demand.
UGameFeatureData
Each Game Feature plugin contains a `UGameFeatureData` primary data asset (extends `UPrimaryDataAsset`) that defines what the feature does:
// From GameFeatureData.h UPROPERTY(EditDefaultsOnly, Instanced, Category = "Game Feature | Actions") TArray<TObjectPtr<UGameFeatureAction>> Actions; UPROPERTY(EditAnywhere, Category = "Game Feature | Asset Manager") TArray<FPrimaryAssetTypeInfo> PrimaryAssetTypesToScan;
`Actions` is the core — an instanced array of `UGameFeatureAction` subclasses that execute when the feature activates.
Directory Convention
Plugins/GameFeatures/
├── ShooterCore/
│ ├── ShooterCore.uplugin (Type: GameFeature)
│ ├── Content/
│ │ └── ShooterCore.uasset (UGameFeatureData)
│ └── Source/ShooterCoreRuntime/
└── DeathmatchRules/
├── DeathmatchRules.uplugin
└── Content/DeathmatchRules.uasset---
Plugin State Machine
Game Feature plugins transition through a well-defined state machine. Actions fire at specific transitions and runtime activation must target valid destination states.
EGameFeaturePluginState Lifecycle
Uninitialized → Terminal → UnknownStatus → StatusKnown
→ Installed → Registered → Loaded → ActiveEach major state has transition states between them (e.g., `Registering`, `Loading`, `Activating`). You target a destination state and the subsystem walks the chain.
Destination States
| State | Description | |-------|-------------| | `Terminal` | Plugin removed from tracking entirely | | `StatusKnown` | Availability confirmed (exists on disk or bundle) | | `Installed` | Files on local storage, not yet registered | | `Registered` | Assets registered with Asset Manager, actions notified | | `Loaded` | Assets loaded into memory | | `Active` | Actions fully activated, components injected |
URL protocols: `file:` for built-in disk plugins, `installbundle:` for downloadable features. Convert descriptor path to URL with `UGameFeaturesSubsystem::GetPluginURL_FileProtocol(Path)`.
---
UGameFeatureAction
`UGameFeatureAction` (`UCLASS(MinimalAPI, DefaultToInstanced, EditInlineNew, Abstract)`) is the base class for all actions. `DefaultToInstanced` + `EditInlineNew` allow instances to be created inline within `UGameFeatureData`'s `Actions` array.
Lifecycle Methods
// Registration phase virtual void OnGameFeatureRegistering(); virtual void OnGameFeatureUnregistering(); // Loading phase virtual void OnGameFeatureLoading(); virtual void OnGameFeatureUnloading(); // Activation — primary override point virtual void OnGameFeatureActivating(FGameFeatureActivatingContext& Context); virtual void OnGameFeatureActivating(); // legacy no-arg fallback // Post-activation confirmation virtual void OnGameFeatureActivated(); // Deactivation — supports async via context virtual void OnGameFeatureDeactivating(FGameFeatureDeactivatingContext& Context);
`OnGameFeatureActivating(Context)` is the primary override. The base calls the legacy no-arg version for backward compatibility.
Async Deactivation
When deactivation requires async work, pause it via the context:
void UMyAction::OnGameFeatureDeactivating(FGameFeatureDeactivatingContext& Context)
{
FSimpleDelegate ResumeDelegate = Context.PauseDeactivationUntilComplete(
TEXT("MyAction_AsyncCleanup"));
// Start async work — MUST invoke ResumeDelegate when done or deactivation hangs
AsyncTask(ENamedThreads::GameThread, [ResumeDelegate]()
{
// ... cleanup ...
ResumeDelegate.ExecuteIfBound();
});
}See `references/game-feature-patterns.md` for complete custom action subclass templates.
---
Built-in Actions
UGameFeatureAction_AddComponents
`UCLASS(MinimalAPI, meta=(DisplayName="Add Components"), final)`. The most commonl
A collection of 27 AI agent skills for Unreal Engine C++ development. Built for game developers who want AI coding agents to help write correct, production-quality UE5 C++ code.
Other skills on unreal-engine-skills.
- /ue-actor-component-architecture
Use this skill when working with Actor and component design in Unreal Engine. Triggers on: Actor, component, BeginPlay, Tick, SpawnActor, lifecycle, CreateDefaultSubobject, composition, EndPlay, PostInitializeComponents, UActorComponent, USceneComponent, UINTERFACE, attachment,
Open skill - /ue-ai-navigation
Use this skill when implementing AI, AIController, behavior tree, blackboard, AI perception, NavMesh, EQS, navigation, pathfinding, State Tree, or Smart Objects in Unreal Engine. See references/behavior-tree-patterns.md for BT patterns and references/eqs-reference.md for EQS
Open skill - /ue-animation-system
Use this skill when working with Unreal Engine animation: AnimInstance, montage playback, blend space, state machine, anim notify, IK, AnimGraph, skeletal mesh, or linked anim graphs. See references/anim-notify-reference.md for notify patterns and references/locomotion-setup.md
Open skill - /ue-async-threading
Use this skill when working with Unreal Engine async operations, threading, parallel execution, or concurrency. Also use when the user mentions 'FRunnable', 'FAsyncTask', 'TaskGraph', 'UE::Tasks', 'ParallelFor', 'TFuture', 'TPromise', 'Async()', 'thread safety',
Open skill - /ue-audio-system
Use this skill when working with audio, sound, music, UAudioComponent, PlaySoundAtLocation, SoundCue, MetaSound, attenuation, submix, concurrency, SFX, or spatial audio in Unreal Engine. See references/audio-setup-patterns.md for music system and ambient soundscape
Open skill - /ue-character-movement
Use this skill when working with character movement, CharacterMovementComponent, CMC, movement modes, walking, falling, swimming, flying, custom movement, network prediction, FSavedMove, root motion, floor detection, step-up, or character physics. Also use for 'PhysWalking',
Open skill

