Sistema di salvataggi su Unreal Engine 4 – Lezione Master

Il sistema di salvataggi, o SaveGame, su Unreal Engine 4 – come su altri engine – può risultare complesso se non viene compreso a fondo: non basta “scopiazzare” una Blueprint già fatta per potersi dire capaci di salvare correttamente il gioco quando lo si vuole su UE4.

Anzitutto, prima di partire, è bene definire per chiarezza cos’è un salvataggio, o in altre parole cosa significa salvare una partita: il salvataggio è l’operazione che permette di creare o aggiornare informazioni in un dispositivo di massa (p.es. un hard disk).
Quali sono queste informazioni? Le variabili del nostro videogioco!

L’actor SaveGame è alla base del sistema di salvataggi di Unreal Engine 4

Sarebbe veramente scomodo – in termini di memoria sopratutto – dover salvare sistematicamente tutte le variabili in gioco, infatti non è così: solo le variabili all’interno degli actor di classe SaveGame verranno salvate su Unreal Engine 4.

Iniziamo creando questo actor:

Creare un sistema di salvataggi su Unreal Engine 4

Clicca con il tasto destro del mouse nel Content Browser per aprire il menù, quindi seleziona Blueprint Class per creare un nuovo actor. Nel campo di ricerca scrivi SaveGame e seleziona l’unica classe che apparirà: la SaveGame.

All’interno dell’actor possiamo creare tutte le variabili che vogliamo vengano salvate in seguito:

Creare una variabile salvabile UE4
Esempio: creiamo una variabile che esprime il numero del livello cui siamo arrivati nel nostro videogioco, tramite un integer.

Creare il primo salvataggio

Come abbiamo già detto, un salvataggio crea o aggiorna informazioni. Il primo passo è quindi informare Unreal se esiste già un salvataggio, ed in tal caso caricarlo, o se è necessario crearne uno.

Creare un primo salvataggio Blueprints

In tal senso introduciamo il blocco Does Save Game Exist il quale restituirà un boolean: se è già stato creato in precedenza un salvataggio nello slot “Slot Name” darà true (in tal senso, dal momento che esiste già, vogliamo caricarlo) se invece non esiste darà false (in questo caso dobbiamo crearlo per la prima volta).

Precisiamo che il salvataggio su Unreal Engine 4 avviene per slot: ogni slot ha un nome, a cui corrisponde un salvataggio. Generalmente, utilizzeremo un solo slot a meno che non vogliamo far creare più salvataggi diversi ai nostri giocatori (del tipo GTA 5).
Il nome da assegnare allo slot è arbitrario, saremo noi a deciderlo: in questa guida lo chiamerò MySave.

Caricare i salvataggi su Unreal Engine 4

Caricare il salvataggio UE4

Per caricare il salvataggio utilizziamo il blocco Load Game from Slot.
Dal momento che possono esistere molteplici attori di classe “SaveGame” dobbiamo dire ad Unreal da quale di questi vogliamo caricarlo: facciamo quindi il Cast to SaveGame. Il mio SaveGame Actor SaveGame Unreal Engine 4 si chiama allo stesso modo dello Slot Name, ma è solo una scelta personale non obbligatoria.

Caricato il salvataggio, settiamo una variabile (basta crearla) come reference del nostro SaveGame semplicemente prendendo il pin che esce dal Cast to SaveGame: da queste reference possiamo sia leggere che modificare le variabili all’interno del nostro SaveGame.

Get o Set una variabile salvabile su Unreal ita
Esempio: possiamo sia leggere che modificare la variabile prima creata all’interno del SaveGame.

Salvare le variabili modificate: attenzione al rapporto tra Load e Save!

Una volta modificate le variabili, queste lo saranno soltanto all’interno della nostra reference.

Carica e Salva Variabili Sistema Generale Grafico di Flusso

Dovete immaginare il SaveGame come un grande magazzino centrale da cui tutti gli actor che lo necessitano attingono informazioni (le variabili) copiandole. Ciò che caricano gli actor con il Load Game from Slot pertanto è solo una copia e tutte le variabili modificate lo rimarranno localmente fino a che non si aggiorna il SaveGame tramite il blocco Save Game to Slot: il magazzino centrale solo ora ha le variabili modificate!

N.B. dobbiamo rieffettuare il Load dagli altri actor per visualizzare in essi i cambiamenti delle variabili.
Nell’esempio sopra, se il Widget Blueprint esegue un salvataggio di una variabile “vita” e vogliamo leggere il nuovo valore immagazzinato nel SaveGame tramite il Character, dobbiamo rieseguire il Load nella Blueprint del Character in quanto, ripeto, il Load è solo una copia dei valori del SaveGame che viene fatta nel solo istante in cui utilizziamo il blocco Load Game from Slot e non viene aggiornata in continuazione. L’unico modo per aggiornarla è rieseguire il Load.

Salvare il gioco Unreal Engine 4 Blueprints

In alto un esempio concreto con le Blueprint: raggiunto il Checkpoint, settata una variabile a parte (non mostrata nel grafico, può essere ad esempio un vettore che ti dice la posizione del checkpoint) viene poi salvata globalmente nel SaveGame tramite il blocco Save Game to Slot.

Per avere un buon controllo sui salvataggi potresti creare un sistema centralizzato sulla GameInstance del tuo progetto:

In questo modo, pur dovendo sempre far affidamento al GameInstance, sarai sicuro che tutti gli actor che vogliono salvare lo fanno tramite di esso, pertanto non ci sarà il rischio di salvare con due actor contemporaneamente che hanno cambiato variabili differenti, rischiando di non salvare come vorremmo.

Eliminare un salvataggio

Non è sempre essenziale ma a volte può essere utile dare la possibilità ai giocatori di eliminare un salvataggio. Le Blueprints sono provviste anche di questa funzionalità:

Eliminare un Salvataggio UE4 Blueprints

Il blocco in questione si chiama Delete Game in Slot.
Il boolean che restituisce ci avvisa se l’eliminazione è avvenuta – o meno – con successo.

Conclusione

Sistema di salvataggio completo per salvare una partita, caricarla ed eliminarla su Unreal Engine 4

L’immagine in alto riassume in un unico actor tutto ciò che è stato imparato.

Get o Set una variabile salvabile su Unreal ita
Carica e Salva Variabili Sistema Generale Grafico di Flusso

Riepilogando:
Da ricordare che le variabili create nel SaveGame si prendono tramite la variabile di Reference creata o direttamente dal Cast (immagine a sinistra).
Porre inoltre particolare attenzione all’immagine a destra: ricordi come più actor interagiscono con un singolo SaveGame? Se la risposta è sì, complimenti, hai compreso a fondo il sistema di salvataggi di Unreal Engine 4!

Perfavore, disabilita adblock o metti il sito nella whitelist!
Le pubblicità ci fanno andare avanti coprendo spese e ripagando il tempo investito.