Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pjv:laboratoare:2023:10 [2023/12/11 14:57]
alexandru.gradinaru [Documentatie extinsa text]
pjv:laboratoare:2023:10 [2024/10/07 10:49] (current)
alexandru.gradinaru
Line 1: Line 1:
-===== Sisteme de gestiune a datelor =====+===== 10. Sisteme de gestiune a datelor =====
  
 ==== Cerinte ===== ==== Cerinte =====
Line 86: Line 86:
   - XML Serialization   - XML Serialization
   - JSON Serialization   - JSON Serialization
 +
 +Cea mai simpla varianta de salvare a datelor este local pe disc. În esență, tot ce trebuie să facem pentru a salva datele jucătorului este să scriem informații într-un fișier. În Unity, cel mai simplu mod de a face acest lucru este cu un StreamWriter și JsonUtility.
 +
 +StreamWriter ne va permite să scriem date într-un fișier, iar JsonUtility se va ocupa de conversia datelor pe care dorim să le salvăm în JavaScript Object Notation (JSON).
 +
 +Deși nu folosim JavaScript, JSON a devenit unul dintre standardele cele mai populare pentru transmiterea datelor datorită atat capabilitatilor de serializare cat si a faptului ca este foarte ușor de citit si de oameni, spre deosebire de XML care este mai stufos si mai greu de citit direct.
 +
 +In Unity exista deja un utilitar acre sa se ocupe de conversia efectivă către și de la JSON prin JsonUtility. Este indicat totusi sa să înțelegeți si unele dintre limitările JsonUtility înainte de a il folosi, astfel ca vă încurajez să citiți documentatia.
 +
 +Pe plan intern, această metodă utilizează serializatorul Unity; prin urmare, obiectul în care treceți trebuie să fie suportat de serializator:​ trebuie să fie un MonoBehaviour,​ ScriptableObject sau o clasă/​struct simplu cu atributul Serializable aplicat. Tipurile de câmpuri pe care doriți să le includeți trebuie să fie acceptate de serializator;​ câmpurile neacceptate vor fi ignorate, la fel și câmpurile private, câmpurile statice și câmpurile cu atributul NonSerialized aplicat.
 +
 +De exemplu, pentru a salva date in mod persistent despre joc, o functionalitate de Save Game cu alte cuvinte, putem realiza in primul rand o clasa serializabila care sa tina aceste date, sau putem folosi direct date din Player, daca doresc sa persist informatii doar despre personaj.
 +
 +<code c#>
 +[System.Serializable]
 +public class GameData
 +{
 +     // Toate informatiile de care am nevoie la salvare, de ex gamelevel, xp, health etc.
 +     ​public int gamelevel = 0;
 +     ​public float health = 100;
 +     ​public float xp = 0;
 +}
 +</​code>​
 +
 +Apoi realizam un script care sa salveze aceste date pe disk, intr-o baza de date sau in alte metode.
 +
 +<code c#>
 +using System.IO;
 +using UnityEngine;​
 +
 +...
 +
 +    private static string dataFilePath = Path.Combine(Application.persistentDataPath,​ "​SaveGameData.json"​);​
 +    public void SaveGame()
 +    {
 +        GameData gameData = new GameData();
 +        gameData.level = level;
 +        //...etc
 +        // This creates a new StreamWriter to write to a specific file path
 +        using (StreamWriter writer = new StreamWriter(dataFilePath))
 +        {
 +            // This will convert our Data object into a string of JSON
 +            string dataToWrite = JsonUtility.ToJson(gameData);​
 +
 +            // This is where we actually write to the file
 +            writer.Write(dataToWrite);​
 +        }
 +    }
 +    public void LoadGame()
 +    {
 +        // This creates a StreamReader,​ which allows us to read the data from the specified file path
 +        using (StreamReader reader = new StreamReader(dataFilePath))
 +        {
 +            // We read in the file as a string
 +            string dataToLoad = reader.ReadToEnd();​
 +
 +            // Here we convert the JSON formatted string into an actual Object in memory
 +            gameData = JsonUtility.FromJson<​Data>​(dataToLoad);​
 +        }
 +    }
 +}
 +</​code>​
pjv/laboratoare/2023/10.1702299470.txt.gz · Last modified: 2023/12/11 14:57 by alexandru.gradinaru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0