유튜브 UE KR에 공개되어 있는 라이라 스타터 게임 개요 영상을 보고 요약한 내용입니다.
대략적으로 이해한 내용만 간추려 작성하였습니다. 보다 정확한 내용은 영상 참고 부탁드립니다.

UCLASS(BlueprintType, Const)
class ULyraExperienceDefinition : public UPrimaryDataAsset
{
GENERATED_BODY()
public:
ULyraExperienceDefinition();
//~UObject interface
#if WITH_EDITOR
virtual EDataValidationResult IsDataValid(TArray<FText>& ValidationErrors) override;
#endif
//~End of UObject interface
//~UPrimaryDataAsset interface
#if WITH_EDITORONLY_DATA
virtual void UpdateAssetBundleData() override;
#endif
//~End of UPrimaryDataAsset interface
public:
// List of Game Feature Plugins this experience wants to have active
UPROPERTY(EditDefaultsOnly, Category = Gameplay)
TArray<FString> GameFeaturesToEnable;
/** The default pawn class to spawn for players */
//@TODO: Make soft?
UPROPERTY(EditDefaultsOnly, Category=Gameplay)
TObjectPtr<const ULyraPawnData> DefaultPawnData;
// List of actions to perform as this experience is loaded/activated/deactivated/unloaded
UPROPERTY(EditDefaultsOnly, Instanced, Category="Actions")
TArray<TObjectPtr<UGameFeatureAction>> Actions;
// List of additional action sets to compose into this experience
UPROPERTY(EditDefaultsOnly, Category=Gameplay)
TArray<TObjectPtr<ULyraExperienceActionSet>> ActionSets;
};

UCLASS(BlueprintType, Const, Meta = (DisplayName = "Lyra Pawn Data", ShortTooltip = "Data asset used to define a Pawn."))
class LYRAGAME_API ULyraPawnData : public UPrimaryDataAsset
{
GENERATED_BODY()
public:
ULyraPawnData(const FObjectInitializer& ObjectInitializer);
public:
// Class to instantiate for this pawn (should usually derive from ALyraPawn or ALyraCharacter).
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Lyra|Pawn")
TSubclassOf<APawn> PawnClass;
// Ability sets to grant to this pawn's ability system.
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Lyra|Abilities")
TArray<TObjectPtr<ULyraAbilitySet>> AbilitySets;
// What mapping of ability tags to use for actions taking by this pawn
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Lyra|Abilities")
TObjectPtr<ULyraAbilityTagRelationshipMapping> TagRelationshipMapping;
// Input configuration used by player controlled pawns to create input mappings and bind input actions.
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Lyra|Input")
TObjectPtr<ULyraInputConfig> InputConfig;
// Default camera mode used by player controlled pawns.
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Lyra|Camera")
TSubclassOf<ULyraCameraMode> DefaultCameraMode;
};
Gameplay Effects는 적용될 때 마다 Attributes를 변경합니다.
Attributes는 Ability System에 노출된 액터의 수치상 State를 의미합니다. 예시로 HP, 보유 탄 개수 등이 있습니다.
UCLASS(BlueprintType, Const)
class ULyraAbilitySet : public UPrimaryDataAsset
{
GENERATED_BODY()
public:
ULyraAbilitySet(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());
// Grants the ability set to the specified ability system component.
// The returned handles can be used later to take away anything that was granted.
void GiveToAbilitySystem(ULyraAbilitySystemComponent* LyraASC, FLyraAbilitySet_GrantedHandles* OutGrantedHandles, UObject* SourceObject = nullptr) const;
protected:
// Gameplay abilities to grant when this ability set is granted.
UPROPERTY(EditDefaultsOnly, Category = "Gameplay Abilities", meta=(TitleProperty=Ability))
TArray<FLyraAbilitySet_GameplayAbility> GrantedGameplayAbilities;
// Gameplay effects to grant when this ability set is granted.
UPROPERTY(EditDefaultsOnly, Category = "Gameplay Effects", meta=(TitleProperty=GameplayEffect))
TArray<FLyraAbilitySet_GameplayEffect> GrantedGameplayEffects;
// Attribute sets to grant when this ability set is granted.
UPROPERTY(EditDefaultsOnly, Category = "Attribute Sets", meta=(TitleProperty=AttributeSet))
TArray<FLyraAbilitySet_AttributeSet> GrantedAttributes;
};
/** Description of settings used to display experiences in the UI and start a new session */
UCLASS(BlueprintType)
class ULyraUserFacingExperienceDefinition : public UPrimaryDataAsset
{
GENERATED_BODY()
public:
/** The specific map to load */
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category=Experience, meta=(AllowedTypes="Map"))
FPrimaryAssetId MapID;
/** The gameplay experience to load */
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category=Experience, meta=(AllowedTypes="LyraExperienceDefinition"))
FPrimaryAssetId ExperienceID;
/** Extra arguments passed as URL options to the game */
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category=Experience)
TMap<FString, FString> ExtraArgs;
/** Primary title in the UI */
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category=Experience)
FText TileTitle;
/** Secondary title */
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category=Experience)
FText TileSubTitle;
/** Full description */
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category=Experience)
FText TileDescription;
/** Icon used in the UI */
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category=Experience)
TObjectPtr<UTexture2D> TileIcon;
/** The loading screen widget to show when loading into (or back out of) a given experience */
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category=LoadingScreen)
TSoftClassPtr<UUserWidget> LoadingScreenWidget;
/** If true, this is a default experience that should be used for quick play and given priority in the UI */
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category=Experience)
bool bIsDefaultExperience = false;
/** If true, this will show up in the experiences list in the front-end */
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category=Experience)
bool bShowInFrontEnd = true;
/** If true, a replay will be recorded of the game */
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category=Experience)
bool bRecordReplay = false;
/** Max number of players for this session */
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category=Experience)
int32 MaxPlayerCount = 16;
public:
/** Create a request object that is used to actually start a session with these settings */
UFUNCTION(BlueprintCallable, BlueprintPure=false)
UCommonSession_HostSessionRequest* CreateHostingRequest() const;
};

USTRUCT(BlueprintType)
struct FLyraInputAction
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
TObjectPtr<const UInputAction> InputAction = nullptr;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Meta = (Categories = "InputTag"))
FGameplayTag InputTag;
};
/**
* ULyraInputConfig
*
* Non-mutable data asset that contains input configuration properties.
*/
UCLASS(BlueprintType, Const)
class ULyraInputConfig : public UDataAsset
{
GENERATED_BODY()
...
// List of input actions used by the owner. These input actions are mapped to a gameplay tag and are automatically bound to abilities with matching input tags.
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Meta = (TitleProperty = "InputAction"))
TArray<FLyraInputAction> AbilityInputActions;
};
USTRUCT(BlueprintType)
struct FLyraAbilitySet_GameplayAbility
{
GENERATED_BODY()
public:
// Gameplay ability to grant.
UPROPERTY(EditDefaultsOnly)
TSubclassOf<ULyraGameplayAbility> Ability = nullptr;
// Level of ability to grant.
UPROPERTY(EditDefaultsOnly)
int32 AbilityLevel = 1;
// Tag used to process input for the ability.
UPROPERTY(EditDefaultsOnly, Meta = (Categories = "InputTag"))
FGameplayTag InputTag;
};