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;
}אתגר
בינונישתף את הקבוצה כקוד JSON.
- ב־
CharacterBuild, הפוך אתStrengthלשדה,public int strength;, וסמן אתagilityבאמצעות[SerializeField]. - מתחתיו, כתוב מחלקה
Teamעם[System.Serializable]ובהpublic List<CharacterBuild> heroes;. ב־TeamCode, הגדר את הרשימה כ־public Team team;והצג ביומן את ה־JSON שלה. 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
1רכיבים, לא היררכיות
רכיבים קטניםסקריפט בסיסי לאויברכיבים מופשטיםרכיבים שפועלים יחדחזרה: צריח מודולריחזרה: תותח כפול4נתונים שעברו סריאליזציה
מחלקות שניתנות לסריאליזציהרשימות ב־Inspectorטיפוסי Enum ב־Inspectorחזרה: טבלת שללהגרלת השלל2ממשקים ב-Unity
IDamageableממשקים ו-TryGetComponentGetComponentsסיכום: מקש אינטראקציהסיכום: הקרוב ביותר בטווחתרגלו בעצמכם: Unity אונליין