Written for Unreal Engine 5.3 C++

Lyra Deep Dive Series

Introduction

Lyra is a sample game created by Epic Games to demonstrate Unreal Engine frameworks.

This is the first chapter in my Lyra deep dive. I am walking through the essence of Lyra step-by-step focusing on one feature at a time. I have no intention of covering everything Lyra has to offer, but I will keep going until when I’ve felt like I’ve gone far enough, which will be an arbitrary decision. 😊

Since this is a technical deep dive, I will assume you can read C++ and have more than just a surface level understanding of Unreal Engine.

Articles like this one are essentially my personal notes I’ve written while exploring Unreal Engine and cleaned up to share with the public. Unreal Engine is massive and Lyra introduces numerous new features on top of an already massive codebase. It helps me to better understand (and remember) how to do things and how they work if I flesh out my notes to make them useful for not just myself but everyone else too.

As Lyra is still under development, it’s probable for some details in this series to become out of date.

All code provided in this series are excerpts of Lyra source code that are copyrighted by Epic Games and subject to the Unreal Engine End User License Agreement.

Lyra Project

The Lyra project has four targets:

Target Name Outcome
LyraEditor Editor build that contains both the game and the Unreal Editor. Use this target to launch the Unreal Editor.
LyraServer A dedicated server.
LyraClient A game client without server code.
LyraGame A standalone game with both client and server code.

All targets call ApplySharedLyraTargetSettings in LyraGameTarget. This method configures common settings based on the target type.

Logging

Custom log channels make it easier to identify which feature generated a log message, warning, or error, and provides finer control over log verbosity. Lyra implements multiple log channels for various features.

In LyraGame, the log channels are defined in LyraLogChannels.h and implemented in LyraLogChannels.cpp.

There’s also a global helper function GetClientServerContextString implemented here. This function is used by actors and actor components to log their network context, i.e., running on either the client or server, or none if not networked.

// LyraLogChannels.h
LYRAGAME_API DECLARE_LOG_CATEGORY_EXTERN(LogLyra, Log, All);
LYRAGAME_API FString GetClientServerContextString(UObject* ContextObject = nullptr);

// LyraLogChannels.cpp
DEFINE_LOG_CATEGORY(LogLyra);
FString GetClientServerContextString(UObject* ContextObject) { /* Implementation */ }

Next Steps

Learn more about the Lyra Experiences system in the next chapter ❭