In this lesson, you will learn how to configure Actor classes to automatically propagate property updates and state changes from the server to all connected clients.
The Foundation of Network Synchronization
In Unreal Engine’s client-server architecture, the server acts as the "source of truth." When an object is replicated, the server continuously streams the values of its designated properties to every connected client. If an object is not set to replicate, any changes made to its state on the server will remain invisible to your players.
Enabling Actor Replication
To begin, you must explicitly flag your Actor for replication. Within your class constructor, you must set the bReplicates boolean to true. This tells the engine that the Actor should exist on the network and participate in the synchronization lifecycle.
AMySynchronizedActor::AMySynchronizedActor()
{
// Enable replication for this actor
bReplicates = true;
// Ensure the actor is set to always network
SetReplicates(true);
}
Synchronizing Properties with GetLifetimeReplicatedProps
Simply setting bReplicates is not enough to sync specific data, such as a health value or a toggle state. You must register individual variables within the GetLifetimeReplicatedProps function. This function allows you to define the replication conditions for your variables, such as COND_None (always replicate) or COND_OwnerOnly (replicate only to the specific client that owns the actor).
void AMySynchronizedActor::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
// Register a variable for replication
DOREPLIFETIME(AMySynchronizedActor, MySynchronizedVariable);
}
The Synchronization Flow
Once configured, the engine handles the underlying heavy lifting:
- Initial Replication: When a client joins the game or enters the "Relevancy" range of the object, the server sends the current state of all registered properties.
- Periodic Updates: As the server modifies these properties, the engine bundles those changes and sends them to the clients during the next network tick.
- Consistency: By using this system, you ensure that the state displayed on every client stays tightly aligned with the authoritative state on the server, preventing "state drift" where players might see different outcomes for the same event.
Key Takeaway: By setting bReplicates to true and registering your variables via DOREPLIFETIME, you establish a robust, automated pipeline that ensures your object state remains consistent across all network clients.