CREATOR VOICE

First Look at Unreal Engine 5 Game Features Plugin

Examining why the new Game Features grabbed my attention

Screen from the new Valley of the Ancients gameplay demo for UE5. Source: YouTube.

Project setup

[/Script/AssetReferenceRestrictions.AssetReferencingPolicySettings]
EnginePlugins=(DefaultRule=(CanReferenceTheseDomains=("ProjectContent"),bCanProjectAccessThesePlugins=True,bCanBeSeenByOtherDomainsWithoutDependency=True),AdditionalRules=)
ProjectPlugins=(DefaultRule=(CanReferenceTheseDomains=("ProjectContent"),bCanProjectAccessThesePlugins=True,bCanBeSeenByOtherDomainsWithoutDependency=True),AdditionalRules=)
DefaultProjectContentRule=(CanReferenceTheseDomains=("HoverDrone","AncientBattle",""))
bEnableAssetFiltering_TEMP=False
bEnableAssetValidator_TEMP=False

Game Features overview

ValleyoftheAncient/Content/AncientContent/Blueprints/Framework/BP_AncientGameMode.uasset
void AAncientGameModeBase::ToggleGameFeaturePlugin(FString GameFeaturePluginName, bool bEnable)
{
FString PluginURL;

UGameFeaturesSubsystem::Get().GetPluginURLForBuiltInPluginByName(GameFeaturePluginName, PluginURL);
bEnable ? UGameFeaturesSubsystem::Get().LoadAndActivateGameFeaturePlugin(PluginURL, FGameFeaturePluginLoadComplete()) : UGameFeaturesSubsystem::Get().UnloadGameFeaturePlugin(PluginURL);
}

Adding a new ability to the Ancient Battle feature

/** Represents an action to be taken when a game feature is activated */
UCLASS(DefaultToInstanced, EditInlineNew, Abstract)
class GAMEFEATURES_API UGameFeatureAction : public UObject
{
GENERATED_BODY()
public:
virtual void OnGameFeatureRegistering() {}
virtual void OnGameFeatureActivating() {} virtual void OnGameFeatureLoading() {} virtual void OnGameFeatureDeactivating(FGameFeatureDeactivatingContext& Context) {}#if WITH_EDITORONLY_DATA
virtual void AddAdditionalAssetBundleData(FAssetBundleData& AssetBundleData) {}
#endif
};

Result

The exciting future of modular gameplay systems

Managing multi-mode games

Quest systems and other world-specific subsystems

Extensions for live games

Technical Designer at Yager Interactive. Ex live-producer at Electronic Arts. I write about Unreal Engine development, game business, and technology.