GameFeature Plugins
A GameFeature Plugin (GFP) is more like a Mod than like a traditional plugin.
Where a regular Plugin cannot access base game code,
a GameFeature plugin CAN.
The benefit of using a GameFeature plugin is you can bundle together code
and assets that are all related to specific features that you may sometimes
want the player to access, and other times not.
For example, Fortnite uses GFPs to bundle seasonal content. Alternatively, you can bundle optional DLCs that your player may or may not have access to.
The code and assets bundled in the GFP are only ever loaded if/when your game explicitly requests it.
How to use GameFeaturePlugins in Your Game
To make GameFeaturePlugins easy to use, Lyra introduces the concept of the Lyra Experience.
Long story short, when a map is loaded, it automatically loads the Lyra Experience associated with that map, which then loads and initializes any GameFeaturePlugins that are required for that Experience.
The GameFeaturePlugin loading procedure includes executing some GameFeatureActions, which do things like inject components into actors at runtime, configure input mappings and UI settings, etc.
How to support GameFeaturePlugins
Implementing the Modular Gameplay
pattern in your game allows you to ship a basic game
that can choose IF and WHEN
to load custom GameFeature components at runtime.
Basing your APlayerState, APlayerController, ACharacter
and other classes on their respective Modular Gameplay implementations
is required to get this to work.
(You can implement the Modular Gameplay patterns yourself
into your existing code if you prefer to avoid a rebase onto
the default ModularGameplayActors implementation.)
LyraStarterGame Example
In LyraStarterGame, ALyraPlayerState, ALyraPlayerController, ALyraCharacter
and more are all based on the ModularGameplayActors plugin.
At runtime, the game knows all of the GameFeature plugins that are available, but
it does not load or activate these plugins unless/until the game explicitly chooses to do so.
In Lyra when you Load an Experience it will automatically load any GameFeature plugins
that experience depends on and then will launch the game into that map with that experience
and all of its runtime-loaded code/assets enabled.
Debugging Tip
Enable LogGameFeatures Verbose logging to gain visibility into when Game Feature Actions
are being run and what they are doing to your game objects.
Console Command: Log LogGameFeatures Verbose
Miscellaneous
By default, when you create a GameFeature plugin in the UE5 editor, it will force
some parts of your XistGame project to use the name XistGameRuntime instead.
I asked for: XistGame
I received: XistGame (sometimes XistGameRuntime and XISTGAMERUNTIME_API)
Maybe there are great reasons for explicitly decorating your API name with RUNTIME, but it was annoying me, so I modified it.
You can only easily do this when you first create your GFP. If you have a ton of assets already existing with the RUNTIME name, you’d need to add some CoreRedirects and explicitly ReSave all of them.
On a newly created GFP, to remove the RUNTIME name from your API, follow this procedure:
How to: Remove “Runtime” Suffix from GameFeature Plugin Code Names
Now what I have is: XistGame (always XistGame and XISTGAME_API)