Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment enregistrer un GameObject - Unity ?

Sujet résolu
    1 août 2017 à 15:35:28

    Bonjour à tous ! :)

    Je code actuellement un jeu sous Unity, c'est un "simulateur de guerre spatiale", et je m'attaque à une partie édition afin de créer directement dans le jeu ses propres vaisseaux.

    Pour la création pas de problème, mais ma question étais de savoir si je pouvais sauvegarder le GameObject créé, autrement dit le vaisseau, d'une façons "assez simple". J'ai bien penser à une fonction qui me permettrais de mettre tout les éléments du vaisseau dans un tableau sauvegarder via PlayerPrefs mais j'ai peur que cela donne un code un peu lourd...

    Du coup, en quête de savoir, je me tourne vers vous chers développeurs :D

    Cordialement,

    • Partager sur Facebook
    • Partager sur Twitter
    L'humanité n'a pas lieu d'être quant on éprouve une honte a faire pare de cette espèce...Open mind lead to open doors
      4 août 2017 à 4:20:52

      Hein ? rien compris
      • Partager sur Facebook
      • Partager sur Twitter
      Citatione
        9 août 2017 à 12:21:52

        Comment sauvergarder un gameobject a partir du jeu ? Genre comme avec player pref mais sur un gameobject
        • Partager sur Facebook
        • Partager sur Twitter
        L'humanité n'a pas lieu d'être quant on éprouve une honte a faire pare de cette espèce...Open mind lead to open doors
          14 août 2017 à 11:51:25

          "Let me google that for you" ? Sérieusement...

          Bon pour celui ou celle qui ne serais pas un gros troll comme mon précédent interlocuteur, je vais tenter de reformuler

          J'ai créé dans mon jeu un mode édition :


          Qui donc me permet de créer des vaisseaux comme ceci:

          Ma question était simplement de savoir comment je peut sauvegarder le travail du joueur, d'une façons ou d'une autre afin de pouvoir directement le piloter dans le jeu comme ceci :

          Cordialement =)

          -
          Edité par :wilo: 15 août 2017 à 13:41:42

          • Partager sur Facebook
          • Partager sur Twitter
          L'humanité n'a pas lieu d'être quant on éprouve une honte a faire pare de cette espèce...Open mind lead to open doors
            16 août 2017 à 5:43:01

            "C'est un petit troll ;)"

            :)

            Mais, c'est vrai avec une recherche google, comment sauvgarder sur Unity t'as ça par exemple hein :

            -https://www.youtube.com/watch?v=-obJe62L0-U

            ou ça:

            -http://www.unity3d-france.com/unity/phpBB3/viewtopic.php?t=5573

            • Partager sur Facebook
            • Partager sur Twitter
            Citatione
              16 août 2017 à 13:24:32

              Non mais c'est que j'ai chercher et je suis tomber sur la réponse : "il est impossible de serializer un gameobject ou de le sauvergarder tel quel"

              Du coup c'est bon mais j'ai trouver un paliatif, j'enregistre pour chaque piece un ID et sa position, que je stock dans une string du playerPref histoire de faire moins de ligne ^^

              Mais je regarderais tes liens, merci

              Si ca peut resservir pour les suivant je mets un bout de code avec ma fonction de sauvergarde et de chargement:

              void Charge()
                  {
                      if (PlayerPrefs.GetInt("SauvergardeVrai") == 1)
                      {
                          string[] ElementAileG = PlayerPrefs.GetString("AileG").Split(';');
                          Destroy(AileG.gameObject);
                          NumAileG = Convert.ToInt16(ElementAileG[0]);
                          AileG = Instantiate(LesAilesG[NumAileG]);
                          AileG.transform.position = new Vector3(Convert.ToSingle(ElementAileG[1]), Convert.ToSingle(ElementAileG[2]), Convert.ToSingle(ElementAileG[3]));
                          AileG.transform.parent = Vaisseau.transform;
              
                          string[] ElementAileD = PlayerPrefs.GetString("AileD").Split(';');
                          Destroy(AileD.gameObject);
                          NumAileD = Convert.ToInt16(ElementAileD[0]);
                          AileD = Instantiate(LesAilesD[NumAileD]);
                          AileD.transform.position = new Vector3(Convert.ToSingle(ElementAileD[1]), Convert.ToSingle(ElementAileD[2]), Convert.ToSingle(ElementAileD[3]));
                          AileD.transform.parent = Vaisseau.transform;
              
                          string[] ElementCanonG = PlayerPrefs.GetString("CanonG").Split(';');
                          Destroy(CanonG.gameObject);
                          NumCanonG = Convert.ToInt16(ElementCanonG[0]);
                          CanonG = Instantiate(LesCanonsG[NumCanonG]);
                          CanonG.transform.position = new Vector3(Convert.ToSingle(ElementCanonG[1]), Convert.ToSingle(ElementCanonG[2]), Convert.ToSingle(ElementCanonG[3]));
                          CanonG.transform.parent = Vaisseau.transform;
              
                          string[] ElementCanonD = PlayerPrefs.GetString("CanonD").Split(';');
                          Destroy(CanonD.gameObject);
                          NumCanonD = Convert.ToInt16(ElementCanonD[0]);
                          CanonD = Instantiate(LesCanonsD[NumCanonD]);
                          CanonD.transform.position = new Vector3(Convert.ToSingle(ElementCanonD[1]), Convert.ToSingle(ElementCanonD[2]), Convert.ToSingle(ElementCanonD[3]));
                          CanonD.transform.parent = Vaisseau.transform;
              
                          string[] ElementReacteurG = PlayerPrefs.GetString("ReacteurG").Split(';');
                          Destroy(ReacteurG.gameObject);
                          NumReacteurG = Convert.ToInt16(ElementReacteurG[0]);
                          ReacteurG = Instantiate(LesReacteurs[NumReacteurG]);
                          ReacteurG.transform.position = new Vector3(Convert.ToSingle(ElementReacteurG[1]), Convert.ToSingle(ElementReacteurG[2]), Convert.ToSingle(ElementReacteurG[3]));
                          ReacteurG.transform.parent = Vaisseau.transform;
              
                          string[] ElementReacteurD = PlayerPrefs.GetString("ReacteurD").Split(';');
                          Destroy(ReacteurD.gameObject);
                          NumReacteurD = Convert.ToInt16(ElementReacteurD[0]);
                          ReacteurD = Instantiate(LesReacteurs[NumReacteurD]);
                          ReacteurD.transform.position = new Vector3(Convert.ToSingle(ElementReacteurD[1]), Convert.ToSingle(ElementReacteurD[2]), Convert.ToSingle(ElementReacteurD[3]));
                          ReacteurD.transform.parent = Vaisseau.transform;
              
                          string[] ElementCockpit = PlayerPrefs.GetString("Cockpit").Split(';');
                          Destroy(Cockpit.gameObject);
                          NumCockpit = Convert.ToInt16(ElementCockpit[0]);
                          Cockpit = Instantiate(LesCockpits[NumCockpit]);
                          Cockpit.transform.position = new Vector3(Convert.ToSingle(ElementCockpit[1]), Convert.ToSingle(ElementCockpit[2]), Convert.ToSingle(ElementCockpit[3]));
                          Cockpit.transform.parent = Vaisseau.transform;
                      }
              
                  }
              
                  void Sauvegarde()
                  {
                      PlayerPrefs.SetString("AileG", Convert.ToString(NumAileG) + ";" + Convert.ToString(AileG.transform.position.x) + ";" +
                          Convert.ToString(AileG.transform.position.y) + ";" + Convert.ToString(AileG.transform.position.z));
                      PlayerPrefs.SetString("AileD", Convert.ToString(NumAileD) + ";" + Convert.ToString(AileD.transform.position.x) + ";" +
                                  Convert.ToString(AileD.transform.position.y) + ";" + Convert.ToString(AileD.transform.position.z));
              
                      PlayerPrefs.SetString("CanonG", Convert.ToString(NumCanonG) + ";" + Convert.ToString(CanonG.transform.position.x) + ";" +
                          Convert.ToString(CanonG.transform.position.y) + ";" + Convert.ToString(CanonG.transform.position.z));
                      PlayerPrefs.SetString("CanonD", Convert.ToString(NumCanonD) + ";" + Convert.ToString(CanonD.transform.position.x) + ";" +
                                  Convert.ToString(CanonD.transform.position.y) + ";" + Convert.ToString(CanonD.transform.position.z));
              
                      PlayerPrefs.SetString("ReacteurG", Convert.ToString(NumReacteurG) + ";" + Convert.ToString(ReacteurG.transform.position.x) + ";" +
                          Convert.ToString(ReacteurG.transform.position.y) + ";" + Convert.ToString(ReacteurG.transform.position.z));
                      PlayerPrefs.SetString("ReacteurD", Convert.ToString(NumReacteurD) + ";" + Convert.ToString(ReacteurD.transform.position.x) + ";" +
                                  Convert.ToString(ReacteurD.transform.position.y) + ";" + Convert.ToString(ReacteurD.transform.position.z));
              
                      PlayerPrefs.SetString("Cockpit", Convert.ToString(NumCockpit) + ";" + Convert.ToString(Cockpit.transform.position.x) + ";" +
                          Convert.ToString(Cockpit.transform.position.y) + ";" + Convert.ToString(Cockpit.transform.position.z));
                      PlayerPrefs.SetInt("SauvergardeVrai", 1);
              
              
                  }



              • Partager sur Facebook
              • Partager sur Twitter
              L'humanité n'a pas lieu d'être quant on éprouve une honte a faire pare de cette espèce...Open mind lead to open doors
                16 août 2017 à 23:32:08

                Une petite quéstion, à quoi sert le .Split (je ne connaissais pas ça :) )

                Sinon j'ai trouvé une solution (je pense)

                https://forum.unity3d.com/threads/serializehelper-free-save-and-load-utility-de-serialize-all-objects-in-your-scene.338148/

                Ou ça (un script): (source : http://answers.unity3d.com/questions/967840/saving-your-scene-and-location-in-game.html)

                 using UnityEngine;
                  using System.Collections;
                  
                  [System.Serializable]//Important! Every custom class that needs to be serialized has to be marked like this!
                  public class Game { //don't need ": Monobehaviour" because we are not attaching it to a game object
                  
                      public string savegameName;//used as the file name when saving as well as for loading a specific savegame
                      public string testString;//just a test variable of data we want to keep
                  
                          
                  }
                using UnityEngine;
                 using System.Collection;
                 
                 public class SaveLoadMenu : MonoBehaviour {
                  
                      public string text = "";//the string we want to save and load. Corresponds to Game.testString
                      private string saveGameName = "My Saved Game";//The name of our saved game to save and load.
                  
                      void OnGUI () {
                          saveGameName = GUI.TextArea(new Rect(20, 0, 50, 200), saveGameName);
                          text = GUI.TextArea(new Rect(20, 50, 50, 200), text);
                  
                          if(GUI.Button(new Rect(20, 100, 50 150), "Save")){
                              Game newSaveGame = new Game();
                              newSaveGame.saveGameName = saveGameName;
                              newSaveGame.testString = text;
                              SaveLoad.Save(newSaveGame);
                          }
                  
                          if(GUI.Button(new Rect(20, 150, 50, 150), "Load")){
                              Game loadedGame = SaveLoad.Load (saveGameName);
                              if(loadedGame != null) {
                                   text = loadedGame.testString;
                              }
                          }
                      }
                 }




                • Partager sur Facebook
                • Partager sur Twitter
                Citatione
                  20 août 2017 à 15:20:04

                  Le premier lien sauvegarde une partie seulement du gameobject, et le code ressemble bien à quelque chose pour enregistrer sur différent slot,  ou du moins j'ai l'impression...

                  Malheureusement je vois pas comment cela pourrais sauvegarder un gameobject complet, avec les meshRenderer et Colliders surtout,  ce qu' était  ma question de départ, surtout qu'il n'y en a même pas passer en paramètre =/

                  Ah oui ? On me pose un lmgtfy et après on viens me poser des questions ?  😂

                  La méthode .split te permet de retourner un tableau de string en en découpant une selon un marqueur : 

                  Imagine que ton marqueur soit '/STOP/'

                  Et que ton texte soit :

                  string monTexte = "toto/STOP/tata/STOP/tutu"

                  Alors monTexte.split te retournera un tableau contenant :

                  Tab[0] "toto" 

                  Tab[1] "tata"

                  Tab[2] "tutu"

                  Mais sinon voici un lien qui pourra t'éclairer : 

                  http://bfy.tw/DTRN 😈

                  Cordialement 😊

                  -
                  Edité par :wilo: 20 août 2017 à 17:30:24

                  • Partager sur Facebook
                  • Partager sur Twitter
                  L'humanité n'a pas lieu d'être quant on éprouve une honte a faire pare de cette espèce...Open mind lead to open doors
                    20 août 2017 à 19:54:16

                    hahaha merci :)

                    Sinon je suis désoler de ne pas trop pouvoir t'aider, j'ai unity installé sur mon ordinateurs avec pleins de projets en attente mais sa fait 2 mois que je n'y ai pas touché, j'ai commencé à faire d'autres petites choses à la place sinon bonne chance pour trouver une chance :)

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Citatione

                    Comment enregistrer un GameObject - Unity ?

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown