Menu
CoddyTech

JsonUtility

חלק מהיחידה ארכיטקטורת משחקים ב-Unity במסלול ה-Unity של Coddy. שיעור 30 מתוך 64.

JSON הוא טקסט שמכיל את הערכים של אובייקט, כך שאפשר לרשום אותו ביומן, לשלוח אותו או לכתוב אותו לקובץ. JsonUtility.ToJson(obj) הופכת אובייקט ל-JSON, ו-JsonUtility.FromJson<T>(json) יוצרת ממנו T חדש. JsonUtility פועלת לפי הכללים שלפיהם פועל Inspector, ולכן היא עובדת עם מחלקה מסוג [System.Serializable]:

[System.Serializable]
public class PlayerProfile
{
    public string playerName = "Ana";
    public int level = 7;
    public List<string> badges = new List<string> { "Explorer", "Sharpshooter" };
    [SerializeField] private float hoursPlayed = 12.5f;
    private int secretCode = 1234;
    public int Rank { get; set; } = 3;
}
string json = JsonUtility.ToJson(new PlayerProfile());
// {"playerName":"Ana","level":7,"badges":["Explorer","Sharpshooter"],"hoursPlayed":12.5}
PlayerProfile copy = JsonUtility.FromJson<PlayerProfile>(json);

secretCode ו-Rank חסרים. JsonUtility כותבת שדות ציבוריים ושדות פרטיים שמסומנים ב-[SerializeField], ולא שום דבר אחר: לא מאפיינים, לא שדות סטטיים ולא שדות פרטיים רגילים. גם על שדה מסוג Dictionary היא מדלגת, וכך גם על שדה שהמחלקה שלו אינה מסוג [System.Serializable]. אלה גם השדות ש-Inspector משמיט. JsonUtility.ToJson(obj, true) כותבת את אותו JSON כשהוא פרוס על פני כמה שורות, כך שקל יותר לקרוא אותו.

רשימה בתוך מחלקה נכתבת, כפי שקורה עם badges. רשימה בפני עצמה אינה נכתבת: JsonUtility זקוקה לאובייקט ברמה העליונה, ולכן JsonUtility.ToJson(scores) עבור List<int> שמכילה 10, 20 ו-30 מחזירה {}. יש לשים את הרשימה בתוך מחלקה ולהמיר אותה; ScoreBoard שמכילה את אותה רשימה נכתבת כך: {"scores":[10,20,30]}:

[System.Serializable]
public class ScoreBoard
{
    public List<int> scores;
}
challenge icon

אתגר

בינוני

שתף את הקבוצה כקוד JSON.

  1. ב־CharacterBuild, הפוך את Strength לשדה, public int strength;, וסמן את agility באמצעות [SerializeField].
  2. מתחתיו, כתוב מחלקה Team עם [System.Serializable] ובה public List<CharacterBuild> heroes;. ב־TeamCode, הגדר את הרשימה כ־public Team team; והצג ביומן את ה־JSON שלה.
  3. LoadCode קוראת את code לתוך team ומציגה ביומן את Loaded 3 heroes.

לחץ על „שחק” ולחץ על מקש הרווח: הקבוצה מוצגת כ־JSON. לאחר מכן לחץ על „בדיקה”.

נסו בעצמכם

using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class CharacterBuild
{
    public string hero;
    public int Strength { get; set; }
    private int agility;
}

כל השיעורים ביחידה ארכיטקטורת משחקים ב-Unity

תרגלו בעצמכם: Unity אונליין