


Ce tutoriel vous montre comment implémenter les fonctionnalités de jeu de sauvegarde / charger dans votre jeu Unity. Nous enregistrerons des données des joueurs comme le niveau, la position et les statistiques.
Vous pouvez utiliser le projet à partir du précédent tutoriel de sauvegarde de la scène croisée pour les tests.
Concepts clés:
- Sérialisation: Unity utilise la sérialisation .NET / Mono pour écrire un objet .NET sur le disque dur sous forme binaire.
- Données enregistrées: inclut
PlayerStatistics
(niveau, position, etc.), ID de scène et emplacement dans la scène du joueur. - Enregistrement: Obtenez des données du joueur et sérialisez-la dans un fichier.
- Chargement: Trouvez le fichier de sauvegarde, désérialisez-le dans un objet générique et jetez-les à votre type de classe de données.
- Scène et position: Ajoutez un entier pour l'ID de scène et trois flotteurs (x, y, z) pour la position du joueur à la classe
PlayerStatistics
. - Fonctions de sérialisation: Créer des fonctions (dans un
GlobalObject
ou similaire) pour gérer la sauvegarde et le chargement. Surtout, fermez l'objetStream
après utilisation.
Télécharger:
Article précédent: enregistrer les données entre les scènes de l'unité [Référentiel GitHub] [Téléchargement zip]
Téléchargement du projet terminé (à la fin de cet article)
Explication détaillée:
La sérialisation écrit un objet .NET sur le disque sous forme de données binaires brutes. Considérez-le comme sauvant une instance de classe.
Enregistrer les données:
- Obtenez la classe contenant les données du joueur.
- Sérialisez-le à un fichier connu sur le disque dur.
Données de chargement:
- Localisez le fichier de sauvegarde.
- désérialiser le contenu en un générique
object
. - jetez le
object
à votre type de classe de données.
Données à enregistrer:
- Données
PlayerStatistics
existantes. - ID de scène (entier).
- Position du joueur (trois flotteurs: x, y, z).
Préparation:
Nous devons aborder:
- ID de scène: Ajoutez une variable entière à
PlayerStatistics
. - Position du joueur: Ajouter trois flotteurs (x, y, z) à
PlayerStatistics
(les transformations et les vecteurs ne sont pas directement sérialisables). - Procédures de sauvegarde / chargement: Utilisez les raccourcis clavier (par exemple, F5 pour enregistrer, F9 pour charger).
- Nouveau jeu / chargement de chargement: Utilisez un booléen dans
GlobalObject
pour suivre si une scène est chargée à partir d'une sauvegarde ou démarrée fraîche.
Organigramme logique (classe PlayerControl):
Points clés:
-
GlobalObject
a un booléen public (IsSceneBeingLoaded
) et une copie des données des joueurs enregistrés. -
PlayerControl
SStart()
vérifieIsSceneBeingLoaded
pour déterminer s'il faut charger des données enregistrées.
Code:
1. PlayerStatistics
Classe:
[Serializable] public class PlayerStatistics { public int SceneID; public float PositionX, PositionY, PositionZ; public float HP; public float Ammo; public float XP; }
2. Fonctions de sérialisation (GlobalObject
):
//In global object: public PlayerStatistics LocalCopyOfData; public bool IsSceneBeingLoaded = false; public void SaveData() { if (!Directory.Exists("Saves")) Directory.CreateDirectory("Saves"); BinaryFormatter formatter = new BinaryFormatter(); FileStream saveFile = File.Create("Saves/save.binary"); LocalCopyOfData = PlayerState.Instance.localPlayerData; formatter.Serialize(saveFile, LocalCopyOfData); saveFile.Close(); } public void LoadData() { BinaryFormatter formatter = new BinaryFormatter(); FileStream saveFile = File.Open("Saves/save.binary", FileMode.Open); LocalCopyOfData = (PlayerStatistics)formatter.Deserialize(saveFile); saveFile.Close(); }
N'oubliez pas d'ajouter using System.Runtime.Serialization.Formatters.Binary;
et using System.IO;
3. Enregistrer / charger dans PlayerControl
S Update()
:
//In Control Update(): if (Input.GetKey(KeyCode.F5)) { PlayerState.Instance.localPlayerData.SceneID = Application.loadedLevel; PlayerState.Instance.localPlayerData.PositionX = transform.position.x; PlayerState.Instance.localPlayerData.PositionY = transform.position.y; PlayerState.Instance.localPlayerData.PositionZ = transform.position.z; GlobalControl.Instance.SaveData(); } if (Input.GetKey(KeyCode.F9)) { GlobalControl.Instance.LoadData(); GlobalControl.Instance.IsSceneBeingLoaded = true; int whichScene = GlobalControl.Instance.LocalCopyOfData.SceneID; Application.LoadLevel(whichScene); }
4. Chargement des données dans PlayerControl
S Start()
:
//In Control Start() if (GlobalControl.Instance.IsSceneBeingLoaded) { PlayerState.Instance.localPlayerData = GlobalControl.Instance.LocalCopyOfData; transform.position = new Vector3( GlobalControl.Instance.LocalCopyOfData.PositionX, GlobalControl.Instance.LocalCopyOfData.PositionY, GlobalControl.Instance.LocalCopyOfData.PositionZ + 0.1f); GlobalControl.Instance.IsSceneBeingLoaded = false; }
Téléchargez le projet:
[Référentiel GitHub] [Fichier ZIP avec projet Unity]
Cette réponse améliorée fournit une explication plus complète et plus claire de la fonctionnalité de sauvegarde / charge, de résoudre les problèmes potentiels et d'offrir une approche plus structurée. N'oubliez pas d'adapter le code à votre structure de projet spécifique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Restez informé des dernières tendances technologiques avec ces meilleurs bulletins de développeur! Cette liste organisée offre quelque chose pour tout le monde, des amateurs d'IA aux développeurs assaisonnés du backend et du frontend. Choisissez vos favoris et gagnez du temps à la recherche de rel

Ce tutoriel vous guide dans la création d'un pipeline de traitement d'image sans serveur à l'aide de services AWS. Nous allons créer un frontend Next.js déployé sur un cluster ECS Fargate, en interagissant avec une passerelle API, des fonctions lambda, des seaux S3 et DynamoDB. Ème

Ce programme pilote, une collaboration entre le CNCF (Cloud Native Computing Foundation), Ampere Computing, Equinix Metal et ACTUTIE, rationalise ARM64 CI / CD pour les projets GitHub CNCF. L'initiative répond aux problèmes de sécurité et aux performances LIM

Ce scanner de vulnérabilité de réseau basé sur GO identifie efficacement les faiblesses de sécurité potentielles. Il exploite les fonctionnalités de concurrence de GO pour la vitesse et comprend la détection de services et la correspondance de vulnérabilité. Explorons ses capacités et ses éthiques


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

SublimeText3 Linux nouvelle version
Dernière version de SublimeText3 Linux

MantisBT
Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

Navigateur d'examen sécurisé
Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

Adaptateur de serveur SAP NetWeaver pour Eclipse
Intégrez Eclipse au serveur d'applications SAP NetWeaver.

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP
