Salvataggio dei progressi del giocatore in una partita Unity


22

Sto realizzando un gioco utilizzando il motore di gioco Unity. Voglio salvare i progressi del giocatore tra cui livello, punti esperienza, personaggio scelto, ecc. Attualmente sto usando playerprefs ma voglio sapere se questo funzionerà anche per i giocatori che eseguiranno questo gioco sui loro dispositivi mobili (Android / iOS) come desktop (OSX / PC)? In caso contrario, come devo salvare queste informazioni? Voglio salvare automaticamente i progressi del giocatore dopo aver completato ogni fase.

Risposte:


30

PlayerPrefs funzionerà su più piattaforme, ma non è raccomandato per i progressi del gioco, salvare i file perché non è sicuro. Come file di testo semplice, un giocatore può facilmente aprirlo e modificare i contenuti per ingannare o rendere il gioco imprevedibile. Inoltre, non è garantito per rimanere in giro.

PlayerPrefs è destinato a informazioni sulle preferenze non essenziali, come la mappatura dei controlli o le impostazioni di musica / sfx: cose che il giocatore può cambiare liberamente in ogni caso e che non perderebbero terribilmente se dovessero (ad esempio su Windows) usare un punto di ripristino del sistema e perdere alcune delle loro informazioni di registro. Se questo perdesse il punteggio più alto o l'avanzamento della campagna, i giocatori sarebbero giustamente turbati!

Invece, si consiglia di salvare l'avanzamento del gameplay nel proprio file (di solito binario, possibilmente crittografato o firmato se si desidera rendere più difficile la modifica, ma vedere il commento di Philipp su questo).

È possibile utilizzare Application.persistentDataPath per ottenere una posizione di salvataggio affidabile su ciascuna piattaforma. In genere si trova in una cartella di dati utente che non verrà cancellata in casi come nell'esempio sopra.

Una volta che hai un percorso in cui salvare, puoi usare i normali metodi C # IO per creare, scrivere e leggere il tuo file. I dettagli varieranno molto a seconda del formato e della struttura del file di salvataggio, quindi in caso di problemi, è meglio porre una nuova domanda in dettaglio cosa stai cercando di fare e dove sei bloccato.


30
Secondo me, crittografare e firmare i tuoi file savegame è solo snakeoil. Non è sicuro perché devi archiviare chiavi e algoritmi nel tuo eseguibile di gioco in cui un hacker esperto può accedervi. È anche inutile. Quando si gioca a giocatore singolo: perché preoccuparsi? Lascia che il giocatore si diverta nel gioco come vuole. Quando si tratta di un gioco multiplayer, dovresti piuttosto salvare tutto sul server in cui è al sicuro da manipolazioni.
Philipp,

5
@ SamedTarıkÇETİN Esiste una distinzione importante tra il percorso dei dati (la posizione in cui è installato il gioco) e il percorso dei dati persistenti (una posizione affidabile per il salvataggio di nuovi dati). Su alcune piattaforme, un gioco creato non può scrivere sul percorso dei dati installato, quindi il salvataggio nel percorso del percorso dati persistente è consigliato come regola generale.
DMGregory

2
Sebbene io sia d'accordo con @Philipp che l'archiviazione sul lato client non è mai veramente sicura e che in molti casi non abbiamo bisogno di essere pesanti nel proteggere i giochi per giocatore singolo, la quantità di sicurezza o offuscamento da applicare è in definitiva una scelta ogni creatore deve farsi da solo. Con questa risposta, desidero solo fornire al richiedente le informazioni per fare una scelta informata su ciò che è adatto per il loro gioco.
DMGregory

1
Da un lato, sono d'accordo con @Philipp ma ho anche visto / lavorato con un file di salvataggio serializzato che era completamente illeggibile con cui lavorare in un editor di testo. Sì, probabilmente avrei potuto capire come entrare e fare qualche cambiamento o un altro, ma dato che il file sembrava 2 mega di esadecimale grezzo sarebbe stato piuttosto faticoso da capire. In questi casi, solo il più irriducibile delle persone proverebbe a smontarlo e i risultati sarebbero specifici per quel punto del gioco (l'aggiunta di un'altra unità al salvataggio spinge tutti i dati successivi a valle). Ancora una volta, non era previsto che fosse sicuro.
Draco18s

2
@ShantanuSingh non memorizzandoli in PlayerPrefs. Questo tipo di informazioni dovrebbe essere archiviato in un database remoto e richiesto all'avvio dell'app. Per compatibilità quando non è disponibile una connessione Internet, tornare a un file locale salvato in modo sicuro (ovvero: crittografato). I valori del database, quando disponibili, dovrebbero sovrascrivere quelli locali. Potrebbero esserci plug-in di acquisto in-app che gestiscono le cose anche in altri modi, ma sarà probabilmente "Internet richiesto", hackerabile (anche un file crittografato non è sicuro al 100%) o come dettagliato da questo commento.
Draco18s


-1

PlayerPrefs è un negozio K / V progettato per "funzionare" a prescindere dalla piattaforma per cui costruisci. Dico solo continuare a usarlo a meno che tu non abbia un motivo convincente per non farlo.


Penso che la domanda fosse praticamente se ci sono ragioni convincenti per non usare PlayerPrefs (sì, ci sono). In quanto tale, ho annullato la votazione di questa risposta perché non risponde alla domanda.
Peter - Unban Robert Harvey,

-1

Quindi il modo migliore è il salvataggio lato server? Converti tutte le informazioni di salvataggio necessarie in stringa json e memorizzale sul proprio server mysql come dati di stringa e quando è necessario caricare, connettersi al server e ripristinarlo?


4
Questa non è una risposta alla domanda. Se hai una domanda, fai una nuova domanda .
Sourav Paul,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.