[DB-AL] Système de sauvegarde

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
rKouyale
Messages : 33
Inscription : 03 Sep 2017 11:58
Contact :

[DB-AL] Système de sauvegarde

Message par rKouyale » 10 Sep 2017 17:13

Bonjour, je suis en train de développer un jeu comme Cookie Clicker et j'aimerais y intégrer un système de sauvegarde afin d'enregistrer le nombre de (pour ma part c'est Burger Clicker) burger que le joueur possède, afin que quand la personne appuie sur le bouton sauvegarder et qu'il revient sur le jeu que le nombre de burger soit toujours là (sinon jeu inutile).

J'ai plusieurs scripts :

Le script Click :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Click : MonoBehaviour {

    public UnityEngine.UI.Text gpc;
    public UnityEngine.UI.Text goldDisplay;
    public float gold = 0.00f;
    public int goldperclick = 1;

    void Update()
    {
        goldDisplay.text = "Burgers : " + gold.ToString("F0");
        gpc.text = goldperclick + " BURGER PAR CLIQUE";
    }

    public void Clicked()
    {
        gold += goldperclick;
    }

}
Le script GoldPerSec (Burger par seconde entre autre) :
CODE : TOUT SÉLECTIONNER

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GoldPerSec : MonoBehaviour {

    public UnityEngine.UI.Text gpsDisplay;
    public Click click;
    public ItemManager[] items;

	void Start () {
        StartCoroutine(AutoTick());
	}
	
	void Update () {
        gpsDisplay.text = GetGoldPerSec() + " BURGER PAR SECONDE";
	}

    public float GetGoldPerSec()
    {
        float tick = 0;
        foreach (ItemManager item in items)
        {
            tick += item.count * item.tickValue;
        }
        return tick;
    }

    public void AutoGoldPerSec()
    {
        click.gold += GetGoldPerSec() / 10;
    }

    IEnumerator AutoTick()
    {
        while (true)
        {
            AutoGoldPerSec();
            yield return new WaitForSeconds(0.10f);
        }
    }
}
Le script ItemManager :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ItemManager : MonoBehaviour {

    public UnityEngine.UI.Text itemInfo;
    public Click click;
    public float cost;
    public int tickValue;
    public int count;
    public string itemName;
    private float baseCost;

	void Start () {
        baseCost = cost;
	}
	
	void Update () {
        itemInfo.text = itemName + "\nCoût : " + cost + "\nBurger : " + tickValue + "/s";
	}

    public void PurchasedItem()
    {
        if (click.gold >= cost)
        {
            click.gold -= cost;
            count += 1;
            cost = Mathf.Round(baseCost * Mathf.Pow(1.15f, count));
        }
    }
}
Le script MenuScript (le menu principal du jeu avec un bouton pour accéder au jeu) :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class MenuScript : MonoBehaviour {

    public Canvas quitMenu;
    public Button startText;
    public Button exitText;

	void Start () {
        quitMenu = quitMenu.GetComponent<Canvas>();
        startText = startText.GetComponent<Button>();
        exitText = exitText.GetComponent<Button>();
        quitMenu.enabled = false;
	}

    public void ExitPress()
    {
        quitMenu.enabled = true;
        startText.enabled = false;
        exitText.enabled = false;
    }

    public void NoPress()
    {
        quitMenu.enabled = false;
        startText.enabled = true;
        exitText.enabled = true;
    }

    public void StartLevel()
    {
        Application.LoadLevel (1);
    }

    public void ExitGame()
    {
        Application.Quit();
    }
}
ET POUR finir le script UpgradeManager :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UpgradeManager : MonoBehaviour {

    public Click click;
    public UnityEngine.UI.Text itemInfo;
    public float cost;
    public float count = 0;
    public int clickPower;
    public string itemName;
    private float baseCost;

    private void Start()
    {
        baseCost = cost;
    }

    void Update () {
        itemInfo.text = itemName + "\nCoût : " + cost + "\nBurger par clique : + " + clickPower;
	}

    public void PurchasedUpgrade()
    {
        if (click.gold >= cost)
        {
            click.gold -= cost;
            count += 1;
            click.goldperclick += clickPower;
            cost = Mathf.Round(baseCost * Mathf.Pow(1.15f, count));
        }
    }
}
Donc voilà si vous avez une idée ou un script n'hésiter pas à me l'envoyer (je suis débutant dans le domaine).

Merci pour votre réponse,

Cordialement

yonathgames
Messages : 45
Inscription : 18 Sep 2017 17:44

Re: [DB-AL] Système de sauvegarde

Message par yonathgames » 21 Sep 2017 11:33

Bonjour,

C'est peut-être un peu tard, mais tu peux utiliser ceci :

PlayerPrefs.SetInt("Player Score", 10); // pour sauvegarder le score

et

PlayerPrefs.getInt("Player Score"); // pour récupérer le score au redémarrage.

J'espère que cela peut t'aider!

rKouyale
Messages : 33
Inscription : 03 Sep 2017 11:58
Contact :

Re: [DB-AL] Système de sauvegarde

Message par rKouyale » 22 Sep 2017 18:29

Dans quelle script ?

Avatar de l’utilisateur
Drakulo
Messages : 113
Inscription : 10 Mars 2017 22:49
Contact :

Re: [DB-AL] Système de sauvegarde pour un Clicker

Message par Drakulo » 23 Sep 2017 11:09

Hello.

Pour enregistrer des données simples comme ça, tu peux jeter un oeil du côté des PlayerPrefs. Voilà un tutoriel qui explique comment mettre ça en place :

:arrow: https://www.esprit-unity.fr/enregistrer ... ayerprefs/
Fun Games Maker @TriplArt
Coach à esprit UNITY : Finissez vos jeux, vivez de votre passion
Enseignant de programmation / Unity3D à Bellecour Ecole

rKouyale
Messages : 33
Inscription : 03 Sep 2017 11:58
Contact :

Re: [DB-AL] Système de sauvegarde

Message par rKouyale » 23 Sep 2017 11:57

Je débute dans le domaine, j'aimerais juste faire un système de sauvegarde, quand la personne quitte le jeu les données sont enregistrer afin que quand il le relance le nombre de Burger soit identique à ceux avant qu'il quitter le jeu. Mais je ne voit pas comment faire ça, si quelqu'un peut m'aider je lui serais très reconnaissant !

Roots
Messages : 58
Inscription : 26 Avr 2017 16:12

Re: [DB-AL] Système de sauvegarde

Message par Roots » 23 Sep 2017 14:57

Salut ,
https://www.youtube.com/watch?v=BgxbCej0GOg
Un exemple parmi tant d'autre , tu trouvera des 10enes de vidéos sur youtube et au moins autant de tutoriels écris (certain en français) en cherchant un peu. Sans compter celui que Drakulo ta aimablement partagé ,qui te fourni déjà toutes les infos dont tu as besoin et est en français !!

Si ce que tu cherches c'est un script à copier/coller , pourquoi le demander sur ce forum alors que tu trouves sans difficulté sur le net ?

L'usage des playerPrefs est extrêmement simple c'est pour cela qu'il est tout indiqué aux débutants , en regardant le tuto de Drakulo en plus de la documentation d'unity tu devrais t'en sortir :)

Si jamais tu as une question spécifique , une chose qui t'échappe et qui t’empêche d'avancer tout le monde t'aidera avec plaisir MAIS ne demande pas qu'on te fasse ton code surtout pour une chose aussi simple que ça .
Et, d'une manière générale les seuls scripts que tu devrais t'autoriser à copier/coller sont ceux dont tu maitrises tous les aspects et que tu pourra utiliser/modifier sans problème, ce qui visiblement est loin d’être le cas pour les playerPrefs.

Amicalement

rKouyale
Messages : 33
Inscription : 03 Sep 2017 11:58
Contact :

Re: [DB-AL] Système de sauvegarde

Message par rKouyale » 23 Sep 2017 16:08

D'abord merci pour vos messages !

Mon jeu se présente comme ceci (le design est temporaire) :

Image

On doit cliquer sur le burger afin d'en gagner d'autres jusqu'à en obtenir des centaines de millions ! :p

J'aimerais y importer un système de sauvegarde simple dans le code ci-dessous afin d'y sauvegarder le nombre de burger lorsque le joueur quitte le jeu mais malheureusement j'ai beau tout essayer rien ne fonctionne. J'ai regarder les pages que vous m'avez envoyer (merci au passage) mais ça ne fonctionne pas chez moi.

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Click : MonoBehaviour {

    public UnityEngine.UI.Text gpc;
    public UnityEngine.UI.Text goldDisplay;
    public float gold = 0.00f;
    public int goldperclick = 1;

    void Update()
    {
        goldDisplay.text = "Burgers : " + gold.ToString("F0");
        gpc.text = goldperclick + " BURGER PAR CLIQUE";
    }

    public void Clicked()
    {
        gold += goldperclick;
    }

}
Pièces jointes
Capture.PNG
Capture.PNG (431.2 Kio) Consulté 4762 fois

Roots
Messages : 58
Inscription : 26 Avr 2017 16:12

Re: [DB-AL] Système de sauvegarde

Message par Roots » 23 Sep 2017 16:18

Il faut plutôt que tu post la partie du code "qui ne marche pas" pour qu'on puisse t'aider, montres ce que tu as essayé de faire qui ne fonctionne pas on sera à plus à même de te corriger .

rKouyale
Messages : 33
Inscription : 03 Sep 2017 11:58
Contact :

Re: [DB-AL] Système de sauvegarde

Message par rKouyale » 23 Sep 2017 16:29

J'ai essayer ça :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Click : MonoBehaviour {

    public UnityEngine.UI.Text gpc;
    public UnityEngine.UI.Text goldDisplay;
    public float gold = 0.00f;
    public int goldperclick = 1;

    void Update()
    {
        goldDisplay.text = "Burgers : " + gold.ToString("F0");
        gpc.text = goldperclick + " BURGER PAR CLIQUE";
    }

    public void Clicked()
    {
        gold += goldperclick;
    }
    
    public void SaveGame() 
    {
    	MyData data = new MyData();
    	data.gold = 0;
    	PlayerPrefs.SetString("playerProgress", serializedObject); (Je ne sais pas quoi mettre ici)
    }
}

Roots
Messages : 58
Inscription : 26 Avr 2017 16:12

Re: [DB-AL] Système de sauvegarde

Message par Roots » 23 Sep 2017 16:58

Tu as probablement remarqué lors du copié/collé que tu viens d'effectuer que cela générait un certain nombres d'erreurs, les exemples que tu as pu trouver mettent en scène des "variables".
Si les premier scripts de que tu as posté sur ce sujet sont bien de toi tu dois savoir maintenant les utiliser un minimum, assez pour comprendre que quand tu copie/colle un exemple de la doc en général tu dois remplacer les variables par les tiennes .

L'exemple que tu as choisi est plus compliqué que ce que tu as besoin d'avoir puisqu'il met en avant une classe serializable dont tu peux te passer ici.

Tu aura du juste prendre le premier exemple que Yonathgames t'avais proposé et qui est tiré de la doc

PlayerPrefs.SetInt(A, B); // A = nom que tu donne à ta valeur et qui va servir à la retrouver . B = la valeur que tu veux lui donner.
// Pour la sauvegarde.

B = PlayerPrefs.GetInt(A) ; // A = nom que tu as donné à ta valeur . B = variable dans laquelle tu va stocker la valeur .
// Pour le chargement.

Si tu comprend pas avec ça je serais dans l'obligation de baisser les bras !

Verrouillé

Revenir vers « (C#) CSharp »