Sauvegarde des progrès du joueur dans un jeu Unity


22

Je crée un jeu en utilisant le moteur de jeu Unity. Je veux enregistrer la progression du joueur, y compris le niveau, les points d'expérience, le personnage choisi, etc. Actuellement, j'utilise playerprefs mais je veux savoir si cela fonctionnera pour les joueurs qui exécuteront ce jeu sur leurs appareils mobiles (Android / iOS). comme ordinateurs de bureau (OSX / PC)? Sinon, comment dois-je enregistrer ces informations? Je veux enregistrer automatiquement la progression du joueur après avoir effacé chaque étape.

Réponses:


30

PlayerPrefs fonctionnera sur plusieurs plates-formes, mais il n'est pas recommandé pour les fichiers de sauvegarde de progression du jeu car il n'est pas sécurisé. En tant que fichier en texte brut, un joueur peut facilement l'ouvrir et modifier le contenu pour tricher, ou rendre votre jeu imprévisible. Il n'est pas non plus garanti de rester.

PlayerPrefs est destiné aux informations de préférences non essentielles, comme le mappage de contrôle ou les paramètres de musique / sfx - des choses que le joueur peut changer librement de toute façon, et qui ne manqueraient pas terriblement s'ils devaient (sous Windows par exemple) utiliser un point de restauration du système et perdre certaines de leurs informations de registre. Si cela perdait leurs meilleurs scores ou la progression de la campagne, les joueurs seraient à juste titre contrariés!

Au lieu de cela, il est recommandé d'enregistrer la progression du jeu dans votre propre fichier (généralement binaire, éventuellement crypté ou signé si vous souhaitez le rendre plus difficile à modifier, mais voir le commentaire de Philipp ci-dessous à ce sujet).

Vous pouvez utiliser Application.persistentDataPath pour obtenir un emplacement de sauvegarde fiable sur chaque plate-forme. Il s'agit généralement d'un dossier de données utilisateur qui ne sera pas effacé dans des cas comme l'exemple ci-dessus.

Une fois que vous avez un chemin d'enregistrement, vous pouvez utiliser les méthodes CO IO régulières pour créer, écrire et lire votre fichier. Les détails varieront beaucoup en fonction du format et de la structure de votre fichier de sauvegarde, donc si vous rencontrez des problèmes, il est préférable de poser une nouvelle question détaillant ce que vous essayez de faire et où vous êtes coincé.


30
À mon avis, le cryptage et la signature de vos fichiers de sauvegarde sont juste du serpent. Ce n'est pas sécurisé car vous devez stocker des clés et des algorithmes dans votre exécutable de jeu où un pirate qualifié peut y accéder. C'est aussi inutile. Quand c'est un jeu solo: pourquoi s'embêter? Laissez le joueur profiter du jeu comme il l'entend. Quand c'est un jeu multijoueur, vous devriez plutôt tout sauvegarder sur le serveur où il est à l'abri de toute manipulation.
Philipp

5
@ SamedTarıkÇETİN Il existe une distinction importante entre le chemin des données (l'emplacement où votre jeu est installé) et le chemin des données persistantes (un emplacement fiable pour enregistrer de nouvelles données). Sur certaines plates-formes, un jeu intégré ne peut pas écrire sur le chemin de données installé, il est donc conseillé d'enregistrer dans l'emplacement du chemin de données persistant en règle générale.
DMGregory

2
Bien que je convienne avec @Philipp que le stockage côté client n'est jamais vraiment sécurisé, et que dans de nombreux cas, nous n'avons pas besoin d'être sévères pour sécuriser les jeux en solo, le niveau de sécurité ou d'obscurcissement à appliquer est finalement un choix chaque créateur doit faire pour lui-même. Avec cette réponse, je veux juste donner au demandeur les informations pour faire un choix éclairé sur ce qui convient à son jeu.
DMGregory

1
D'une part, je suis d'accord avec @Philipp mais j'ai également vu / travaillé avec un fichier de sauvegarde sérialisé qui était complètement illisible avec un éditeur de texte. Oui, j'aurais probablement pu comprendre comment entrer et apporter des modifications ou une autre, mais comme le fichier ressemblait à 2 Mo d'hexidécimal brut, cela aurait été une corvée à comprendre. Dans de tels cas, seuls les plus purs et durs essaieraient de le démonter et les résultats seraient spécifiques à ce stade du jeu (l'ajout d'une unité supplémentaire à la sauvegarde repousse toutes les données suivantes en aval). Là encore, il n'était pas destiné à être sécurisé.
Draco18s

2
@ShantanuSingh en ne les stockant pas dans PlayerPrefs. Ce type d'informations doit être stocké dans une base de données distante et demandé au démarrage de l'application. Pour des raisons de compatibilité lorsqu'une connexion Internet n'est pas disponible, recourez à un fichier enregistré sécurisé local (c'est-à-dire: crypté). Les valeurs de la base de données, lorsqu'elles sont disponibles, doivent remplacer les valeurs locales. Il peut y avoir des plugins d'achat intégrés qui gèrent également les choses de différentes manières, mais ce sera probablement "Internet requis", piratable (même un fichier chiffré n'est pas sûr à 100%), ou comme ce commentaire détaille.
Draco18s


-1

PlayerPrefs est un magasin K / V conçu pour "fonctionner" quelle que soit la plate-forme pour laquelle vous créez. Je dis juste de continuer à l'utiliser, sauf si vous avez une raison impérieuse de ne pas le faire.


Je pense que la question était à peu près s'il y avait des raisons impérieuses de ne pas utiliser PlayerPrefs (oui, il y en a). En tant que tel, j'ai rétrogradé cette réponse car elle ne répond pas à la question.
Peter - Unban Robert Harvey

-1

Donc, la meilleure façon est d'économiser côté serveur? Convertir toutes les informations de sauvegarde nécessaires en chaîne json et les stocker sur son propre serveur mysql en tant que données de chaîne et quand faut-il les charger, se connecter au serveur et les restaurer?


4
Ce n'est pas une réponse à la question. Si vous avez une question, posez-la comme nouvelle question .
Sourav Paul
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.