Documentation

Guide technique et référence API

Qu'est-ce que Easy Replication ?

Easy Replication est un plugin Unreal Engine 5 qui simplifie radicalement la création de jeux multijoueurs. Plus besoin de comprendre les RPCs, la réplication, ou l'architecture client-serveur.

  • Synchroniser des variables entre tous les joueurs
  • Appeler des Ă©vĂ©nements sur tous les clients
  • Spawner des acteurs visibles par tous

Avant / Après

Sans Easy Replication

C++ / Legacy
UFUNCTION(Server, Reliable)
void Server_SetHealth(float NewHealth);

UFUNCTION(NetMulticast, Reliable)
void Multicast_OnHealthChanged();

void Server_SetHealth_Implementation(...)
{
    Health = NewHealth;
    Multicast_OnHealthChanged();
}

Avec Easy Replication

Blueprint / C++
// 1 seule ligne !
Set Synced Float (Target, "Health", 100.0)

Installation

1

Copier le Plugin

Copiez le dossier EasyReplication dans le dossier Plugins de votre projet Unreal.

Path
VotreProjet/Plugins/EasyReplication/
2

Redémarrer l'Éditeur

Redémarrez Unreal Engine. Le plugin sera automatiquement détecté et compilé. Assurez-vous qu'il est activé dans Edit > Plugins.

3

Ajouter le Composant Player

Ouvrez votre PlayerController Blueprint et ajoutez le composant Easy Replication Player.

ℹ️

Ce composant est obligatoire pour permettre aux clients d'envoyer des commandes au serveur.

4

Ajouter le Composant aux Actors

Sur chaque Actor que vous voulez synchroniser, ajoutez le composant Easy Replication.

Profils de Réplication

Choisissez un profil adapté à votre Actor. Le plugin configure automatiquement les paramètres de réplication optimaux.

Player Joueur

Personnages contrôlés par les joueurs

Prédiction client, autorité serveur
Interactive Object Objet

Portes, coffres, leviers...

État géré par le serveur
Projectile Rapide

Balles, sorts, objets lancés

Réplication haute fréquence
Static Aucun

Objets décoratifs immobiles

Pas de réplication (optimisation)
đź’ˇ

Le profil se configure dans les détails du composant Easy Replication via la propriété Profile.

Variables Synchronisées

Synchronisez n'importe quelle valeur entre tous les joueurs avec une seule ligne de code. Utilisez les nœuds de la catégorie Easy Replication Helpers.

Types Supportés

Bool boolean

Pour les états on/off

IsOpen, IsDead
Int integer

Pour les compteurs

Ammo, Level
Float decimal

Pour les valeurs précises

Health, Energy
String text

Pour les textes

PlayerName
Vector X, Y, Z

Pour les positions

TargetLoc
Rotator R, P, Y

Pour les rotations

TurretAim
Transform Loc, Rot, Scale

Complet

SpawnPoint
Name id

Identifiants rapides

WeaponID
Actor ref

Références réseau

Target, Vehicle

Exemple : Système de Santé

Blueprint Logic
// 1. Récupérer la santé actuelle
float CurrentHealth = Get Synced Float (Self, "Health");

// 2. Appliquer les dégâts
Set Synced Float (Self, "Health", CurrentHealth - Damage);

// La nouvelle valeur est automatiquement envoyée à tous les clients !

Arrays Synchronisés

Synchronisez des listes entières de données.

Int Array List

Inventaires, IDs

Vector Array List

Waypoints, Path

String Array List

Logs, Chat

Exemple : Inventaire

Blueprint Logic
// Définir l'inventaire
TArray<int32> Items = { 101, 42, 99 };
Set Synced Int Array (Player, "Inventory", Items);

// Lire l'inventaire (sur n'importe quel client)
TArray<int32> MyItems = Get Synced Int Array (Player, "Inventory");

Références Actor

Synchronisez des pointeurs vers d'autres Actors (Cible, Véhicule, Item tenu...).

Actor Ref Pointer

Référence réseau

CurrentTarget
Blueprint Logic
// Le joueur verrouille une cible
Set Synced Actor (Self, "LockedTarget", EnemyActor);

// Sur les autres clients (ex: pour afficher un UI)
AActor* Target = Get Synced Actor (AllyPlayer, "LockedTarget");

Événements Répliqués (RPCs)

Déclenchez des actions à distance sans écrire de C++.

Multicast

Exécuter sur TOUS les clients.

FX, Sons, Anim
Server

Exécuter sur le SERVEUR.

Logique, Spawns
Client

Exécuter sur un JOUEUR précis.

HUD, Messages

Exemple : Jouer un son partout

Blueprint Logic
// 1. Créez un Custom Event "PlayFireSound" dans votre BP
// 2. Appelez-le via Easy Replication :

Call Replicated Event (
    Target: WeaponActor,
    EventName: "PlayFireSound"
);

Événements Ciblés

Envoyez des événements à des destinataires spécifiques pour plus de contrôle.

Server Only

Exécute UNIQUEMENT sur le serveur. Idéal pour la logique critique.

Calcul de dégâts, validation
Owning Client

Exécute sur le client propriétaire de l'Actor.

Feedback UI local, sons locaux
Specific Player

Exécute sur UN joueur précis via son PlayerController.

Message privé, notification

Exemple : Événements ciblés

Blueprint Logic
// Calcul de dégâts sur le serveur uniquement (anti-triche)
Call Server Only Event (Target, "ApplyDamage");
Call Server Only Event (Float) (Target, "TakeDamage", 25.0);

// Feedback au joueur qui possède l'Actor
Call Owning Client Event (Target, "ShowHitMarker");

// Message privé à un joueur spécifique
Call Event On Player (String) (PlayerController, Target, "ShowMessage", "Hello!");

Types de Paramètres

Les événements répliqués supportent de nombreux types de paramètres.

Bool
Int
Float
Vector
String
Rotator
Transform
Actor
Name
Color
Object

Structs Génériques

Exemple : Données du Joueur

C++ Struct
USTRUCT(BlueprintType)
struct FPlayerData
{
    GENERATED_BODY()

    UPROPERTY(BlueprintReadWrite)
    float Health = 100.0f;

    UPROPERTY(BlueprintReadWrite)
    int32 Score = 0;

    UPROPERTY(BlueprintReadWrite)
    FString PlayerName;
};
Blueprint
Set Synced Struct (Player, "MyData", PlayerDataStruct);

Spawn & Destroy Répliqués

Créez ou détruisez des Actors visibles par tous les joueurs instantanément.

Spawn Replicated Actor

Blueprint Logic
// Spawner un projectile visible par tous
AActor* Projectile = Spawn Replicated Actor (
    ActorClass: BP_Projectile,
    SpawnTransform: MuzzleTransform
);

// Détruire un Actor de manière synchronisée
Destroy Replicated Actor (ActorToDestroy);
ℹ️

L'Actor spawné sur le serveur est automatiquement répliqué vers tous les clients. Côté client, la fonction retourne nullptr mais l'Actor apparaîtra via la réplication.

Delegates de Changement

Réagissez aux changements de valeurs synchronisées avec des événements Blueprint.

On Synced Bool Changed

Key, OldValue, NewValue

On Synced Int Changed

Key, OldValue, NewValue

On Synced Float Changed

Key, OldValue, NewValue

On Synced Vector Changed

Key, OldValue, NewValue

On Synced String Changed

Key, OldValue, NewValue

On Synced Actor Changed

Key, OldValue, NewValue

Exemple : Mise Ă  jour de l'UI

Blueprint Event
// Dans le Event Graph, liez l'événement du composant
On Synced Float Changed (Key, OldValue, NewValue)
{
    if (Key == "Health") {
        HealthBar.SetPercent(NewValue / MaxHealth);

        // Effet visuel si dégâts
        if (NewValue < OldValue) {
            PlayDamageFlash();
        }
    }
}
đź’ˇ

Les delegates On Property Synced et On Replication Error sont également disponibles pour un suivi général.

Fonctions Utilitaires

Gérez vos variables synchronisées avec des fonctions pratiques.

Has Synced [Type]

Vérifie si une clé existe

HasSyncedBool, HasSyncedInt...
Remove Synced [Type]

Supprime une variable synchronisée

RemoveSyncedFloat, RemoveSyncedString...
Get All [Type] Keys

Liste toutes les clés d'un type

GetAllSyncedBoolKeys...

Exemple : Gestion des clés

Blueprint Logic
// Vérifier si une variable existe avant de l'utiliser
if (Has Synced Float (Target, "Health")) {
    float Health = Get Synced Float (Target, "Health");
}

// Supprimer une variable (nettoyage)
Remove Synced String (Target, "TempMessage");

// Lister toutes les clés Int pour debug
TArray<FName> Keys = Get All Synced Int Keys (Target);

Helpers Réseau

Is In Multiplayer?

Retourne true si le jeu est en multijoueur

Is Server?

Retourne true si nous sommes le serveur

Is Locally Owned?

Retourne true si l'Actor nous appartient

Net Mode (Text)

Retourne "Solo", "Server", "Client"...

Bonnes Pratiques

1

Nommez vos clés de manière cohérente

Utilisez des noms descriptifs comme "Health", "PlayerName", "IsReady". Évitez les abréviations obscures.

2

Utilisez les bons types

Un booléen pour un état on/off, un int pour un compteur, un float pour une valeur continue. Évitez les strings pour les données numériques.

3

Choisissez le bon profil

Le profil Player pour les personnages, Interactive Object pour les objets interactifs, Projectile pour les éléments rapides.

4

Activez le Debug en développement

Cochez Show Debug Messages dans le composant pour voir les logs de réplication dans la console.