Utilisation détaillée

1. Configurer le système

La configuration du système se fait dans un Data Asset.

RAPPEL

Comme indiqué dans la section Installation, le Data Asset de configuration doit être ajouté à la liste des assets à cooker.

Ouvrir DA_ADS_SaveSystemConfig pour paramétrer le système. Le plugin charge cet asset dans cet emplacement, il ne faut donc ni le déplacer ni le renommer ni le supprimer. Voici le détails des paramètres :

ParamètreDescription
Project Save BehaviorClasse Blueprint dérivée de ADS Project Save Behavior. Elle est facultative, mais permet de gérer les événements et les conversions propres au projet.
Profile Save Game ClassClasse dérivée de ADS Save Game Object utilisée pour profile.sav.
Slot Save Game ClassClasse dérivée de ADS Save Game Object utilisée pour les slots manuels et automatiques.
Current Save VersionVersion du format de sauvegarde, au minimum 1. Augmentez-la lorsqu’une évolution rend les anciennes données incompatibles.
Auto Convert Without ConfirmationActive la conversion directe des anciennes sauvegardes. Désactivé, le projet reçoit d’abord une demande de confirmation.
Manual Save Slot Base NamePréfixe des sauvegardes manuelles. Par exemple, save produit save01 ; ajoutez vous-même un séparateur si nécessaire.
Manual Save Max Slot IndexDernier index autorisé pour une sauvegarde manuelle, de 0 à 999.
Automatic Save Slot Base NamePréfixe des sauvegardes automatiques. Aucun séparateur n’est ajouté automatiquement.
Automatic Save Slot CountNombre de slots utilisés en rotation pour les sauvegardes automatiques, de 1 à 5.
Save Operation TimeoutTemps d’attente des réponses des participants, entre 2 et 20 secondes.
Default Slot ThumbnailImage de repli utilisée lorsqu’une miniature enregistrée est indisponible.
Thumbnail WidthLargeur de la miniature capturée, de 64 à 2048 pixels.
Thumbnail HeightHauteur de la miniature capturée, de 64 à 2048 pixels.
Thumbnail JPEG QualityQualité de compression JPEG de la miniature, de 1 à 100.
Custom Save DirectoryRéservé aux usages personnalisés. Les opérations de slots utilisent actuellement le répertoire de sauvegarde Unreal Engine standard.

2. Le subsystem

Accéder au subsystem

ADS Save System est un Game Instance Subsystem. Récupérez une référence au subsystem dans le Blueprint qui doit l’utiliser.

Les fonctions

Les fonctions ci-dessous sont accessibles depuis une référence au subsystem.

FonctionDescription
Get Project Save BehaviorRetourne le comportement de sauvegarde du projet.
Get Project Save Behavior AsRetourne le comportement de projet avec la classe demandée.
Check ConfigVérifie la configuration runtime et retourne les avertissements et erreurs.
Get Current Save VersionRetourne la version courante du format de sauvegarde.
Check Save VersionCompare une version de sauvegarde à la version courante.
Get Save Version From SlotLit la version de sauvegarde contenue dans un slot.
Scan Saves Needing ConversionRecherche les sauvegardes qui nécessitent une conversion.
Is Convert PendingIndique si une conversion est en attente.
Continue ConvertPoursuit une conversion en attente.
Cancel ConvertAnnule une conversion en attente.
Add ParticipantInscrit un participant et définit les types de sauvegarde auxquels il participe.
Remove ParticipantRetire un participant inscrit.
Clear ParticipantsRetire tous les participants inscrits.
Cleanup ParticipantsRetire les références de participants qui ne sont plus valides.
Get Registered ParticipantsRetourne les participants inscrits.
Get Registered Participant CountRetourne le nombre de participants inscrits.
Save SlotDémarre une sauvegarde de slot.
Load SlotDémarre le chargement d’un slot.
Get Slot CacheRetourne l’objet de sauvegarde mis en cache pour un slot.
Get Last SaveRetourne la dernière sauvegarde connue par le profil.
Get Slot ListRetourne la liste des slots demandés, existants ou vides.
Delete SlotSupprime un slot manuel ou automatique.
Copy SlotCopie un slot vers le premier slot disponible du même type.
Format TimeFormate une date UTC pour son affichage.
Get ThumbnailRetourne la miniature d’un slot ou son image de repli.
Save Slot CacheEnregistre le cache d’un slot sur disque.
Does Slot ExistIndique si un slot existe.
Get Slot NameConstruit le nom correspondant à un type et un index de slot.
Get DigitsRetourne le nombre de chiffres nécessaire pour les indices de slots.
Is Slot Index ValidVérifie la validité d’un index de slot.
Set Part SavedSignale que le participant a terminé sa sauvegarde.
Set Part LoadedSignale que le participant a terminé son chargement.
Is Saved Cache CompleteIndique si tous les participants ont terminé leur sauvegarde.
Is Loaded Cache CompleteIndique si tous les participants ont terminé leur chargement.
Is Operation In ProgressIndique si une opération est active.
Has Pending LoadIndique si un chargement doit encore être appliqué.
Apply Pending LoadApplique un chargement mis en attente.
Get Active Operation IDRetourne l’identifiant de l’opération active.
Get Pending Participant CountRetourne le nombre de participants dont la réponse est attendue.
Cancel Active OperationAnnule l’opération active.
Get Last Automatic IndexRetourne le dernier index utilisé pour la sauvegarde automatique.
Get Next Automatic IndexRetourne le prochain index de sauvegarde automatique.
Set Automatic Index StateDéfinit l’état de rotation des sauvegardes automatiques.

Les Event Dispatchers

Les Event Dispatchers du subsystem permettent aux participants, aux menus et à la logique de projet de réagir aux opérations. Les participants doivent s’abonner dans leur BeginPlay à On Save Requested et On Load Requested pour traiter leur propre partie des données.

Event DispatcherDescription
On Save RequestedDéclenché au début d’une sauvegarde. Chaque participant inscrit écrit ses données puis appelle Set Part Saved avec le contexte reçu.
On Load RequestedDéclenché lorsque les données chargées doivent être appliquées. Chaque participant les lit, les applique puis appelle Set Part Loaded avec le contexte reçu.
On Save CompletedDéclenché lorsqu’une sauvegarde réussit, échoue ou expire. L’écriture disque a lieu seulement après la réponse réussie de tous les participants attendus.
On Load CompletedDéclenché lorsqu’un chargement réussit, échoue ou expire, après l’application des données par tous les participants attendus.
On Convert CompletedDéclenché lorsqu’une conversion de sauvegarde réussit, échoue ou est annulée. Il est indépendant de la fin du chargement.
On Slot DeletedDéclenché après la suppression réussie d’un slot manuel ou automatique. Les sauvegardes de profil ne peuvent pas être supprimées avec Delete Slot.
On Slot CopiedDéclenché après la copie réussie d’un slot manuel ou automatique vers le premier slot disponible du même type.

3. Save Game Object

Créez un Blueprint enfant de ADS Save Game Object et ajoutez-y les variables de projet à conserver (avec l’option SaveGame). Le système y renseigne automatiquement la version, la date UTC, le niveau, le type, l’index, le nom du slot et, si demandé, la miniature.

Pour des données génériques par participant, vous pouvez utiliser Set Part Data, Get Part Data, Remove Part Data, Clear Part Data et Has Part Data. Une partie possède un nom, une version, un contenu texte et un contenu binaire. Pour des données usuelles, préférez néanmoins des variables explicites dans votre Blueprint enfant : elles restent plus faciles à lire et maintenir.

4. Inscrire les participants

Un participant est l’objet qui possède des données à écrire dans une sauvegarde ou à réappliquer au chargement. Chaque participant est responsable de son propre enregistrement : ne centralisez pas cet appel dans un autre Blueprint.

Dans l’événement BeginPlay de chaque participant, récupérez une référence au subsystem. Depuis une référence au subsystem, appelez Add Participant en indiquant l’objet participant et sa participation aux sauvegardes de profil, manuelles et/ou automatiques.

Lorsqu’un participant n’est plus nécessaire, depuis une référence au subsystem, appelez Remove Participant. Utilisez Clear Participants ou Cleanup Participants depuis l’objet qui gère volontairement l’ensemble des participants. Ne créez jamais un nouveau contexte : réutilisez toujours celui reçu par l’événement. Les fonctions Is Saved Cache Complete, Is Loaded Cache Complete, Get Pending Participant Count et Is Operation In Progress permettent de diagnostiquer le flux.

5. Sauvegarder

Déclencher une sauvegarde

Depuis une référence au subsystem, appelez Save Slot en indiquant le type de slot et l’index lorsque le type est manuel. Pour une sauvegarde automatique, l’index est résolu par la rotation. L’option Capture Thumbnail enregistre une miniature JPEG de la vue courante avant l’écriture.

Save Slot déclenche l’opération générale : le subsystem prépare l’objet de sauvegarde puis délègue la sauvegarde des données à chaque participant inscrit pour ce type de slot. Une fois l’opération terminée, le subsystem appelle le dispatcher On Save Completed, avec le contexte, la réussite et une raison d’échec. Appelez Cancel Active Operation pour arrêter une opération en cours ; aucune sauvegarde annulée n’est écrite sur disque.

La sauvegarde des participants

Dans son BeginPlay, chaque participant concerné s’abonne au dispatcher On Save Requested. Lorsque ce dispatcher est déclenché, le participant reçoit le contexte et traite sa sauvegarde. Il écrit sa propre partie des données dans Save Game Object, puis appelle Set Part Saved depuis une référence au subsystem, avec le même contexte et Success à vrai. Le subsystem attend la réponse de tous les participants avant d’écrire le slot.

6. Charger

Déclencher un chargement

Depuis une référence au subsystem, appelez Load Slot avec la classe de sauvegarde configurée. Le subsystem retrouve le slot, peut ouvrir automatiquement le niveau mémorisé, puis délègue l’application des données aux participants après le chargement de la carte. Apply Pending Load est destiné à un flux personnalisé ou au débogage ; normalement il est appelé automatiquement.

Une fois l’opération terminée, le subsystem appelle le dispatcher On Load Completed, avec le contexte, la réussite et une raison d’échec.

Le chargement des participants

Dans son BeginPlay, chaque participant concerné s’abonne au dispatcher On Load Requested. Lorsque ce dispatcher est déclenché, le participant reçoit le contexte et traite son chargement. Il lit sa propre partie des données dans Save Game Object, les applique, puis appelle Set Part Loaded depuis une référence au subsystem avec le même contexte. Le chargement général ne se termine que lorsque tous les participants attendus ont répondu.

7. La logique projet

Introduction

ADS Project Save Behavior est un objet facultatif de logique propre au projet. Le subsystem le crée à partir de la classe configurée dans l’asset runtime, puis l’utilise pour notifier le cycle de vie, les opérations et les conversions de sauvegarde.

Créer la logique

Créez un Blueprint enfant de ADS Project Save Behavior, puis assignez cette classe dans le paramètre Project Save Behavior de DA_ADS_SaveSystemConfig. Implémentez seulement les événements nécessaires à votre projet. Les fonctions présentées ci-dessous sont des événements à override dans ce Blueprint enfant. Overridez seulement celles dont votre projet a besoin.

Les fonctions

FonctionDescription
Initialize BehaviorAppelée après la création de la logique projet. Elle reçoit le subsystem principal.
Deinitialize BehaviorAppelée avant la libération de la logique projet.
Handle Save Operation CompletedAppelée à la fin d’une sauvegarde, réussie ou non, avant le dispatcher public On Save Completed.
Handle Load Operation CompletedAppelée à la fin d’un chargement, réussi ou non, avant le dispatcher public On Load Completed.
Handle Save Operation FailedAppelée lorsqu’une sauvegarde échoue ; la raison précise la cause de l’échec.
Handle Load Operation FailedAppelée lorsqu’un chargement échoue ; la raison précise la cause de l’échec.
Handle Need ConvertAppelée lorsqu’une ancienne sauvegarde requiert la confirmation du projet avant conversion.
Convert SaveConvertit l’objet de sauvegarde entre deux versions. Cette fonction doit être synchrone et retourner vrai seulement si les données sont compatibles.
Handle Convert CompletedAppelée après une conversion réussie, échouée ou annulée, avant le dispatcher public On Convert Completed.
Get ADS Save SystemRetourne le subsystem qui possède cette logique projet.

Gérer les versions des sauvegardes

Depuis une référence au subsystem, utilisez Check Save Version, Get Save Version From Slot ou Scan Saves Needing Conversion pour identifier les sauvegardes anciennes. Si une conversion est requise et que Auto Convert Without Confirmation est désactivé, la logique projet reçoit Handle Need Convert. Après confirmation par votre interface, appelez Continue Convert ; sinon appelez Cancel Convert.

Dans Convert Save, adaptez les données de l’objet de sauvegarde à la nouvelle version. Une sauvegarde créée avec une version plus récente que celle du projet ne peut pas être chargée.