Вбудований спосіб роботи з JSON в Unity Code

JSON (JavaScript Object Notation) — це широко використовуваний формат обміну даними, і його інтеграція в Unity може бути потужною для обробки конфігурацій, збереження прогресу гри або обміну даними із зовнішніми службами. У цьому посібнику ви ознайомитеся з основами роботи з JSON у Unity.

Крок 1: Розуміння JSON

JSON складається з пар ключ-значення та вкладених структур.

Крок 2: Робота з JSON у коді Unity

Unity спрощує серіалізацію та десеріалізацію JSON через свій клас 'JsonUtility'. Цей посібник демонструє основні кроки для роботи з JSON у Unity без зовнішніх бібліотек.

  • Створіть структуру JSON:
{
  "playerName": "John Doe",
  "playerLevel": 5,
  "inventory": ["sword", "shield"]
}
  • Серіалізація - перетворення об'єкта C# у JSON:
using UnityEngine;

[System.Serializable]
public class PlayerData
{
    public string playerName;
    public int playerLevel;
    public string[] inventory;
}

public class SerializationExample : MonoBehaviour
{
    void Start()
    {
        PlayerData playerData = new PlayerData
        {
            playerName = "John Doe",
            playerLevel = 5,
            inventory = new string[] { "sword", "shield" }
        };

        string json = JsonUtility.ToJson(playerData);
        Debug.Log(json);
    }
}
  • Десеріалізація – перетворення JSON на об’єкт C#:
using UnityEngine;

[System.Serializable]
public class PlayerData
{
    public string playerName;
    public int playerLevel;
    public string[] inventory;
}

public class DeserializationExample : MonoBehaviour
{
    void Start()
    {
        string jsonData = "{\"playerName\":\"John Doe\",\"playerLevel\":5,\"inventory\":[\"sword\",\"shield\"]}";
        PlayerData playerData = JsonUtility.FromJson<PlayerData>(jsonData);

        Debug.Log($"Name: {playerData.playerName}, Level: {playerData.playerLevel}");
        Debug.Log("Inventory: " + string.Join(", ", playerData.inventory));
    }
}

Відомі обмеження

'JsonUtility' не підтримує напряму серіалізацію та десеріалізацію масивів об’єктів верхнього рівня (наприклад, '[{},{},{}]') без класу упаковки. Щоб обійти це, ви можете використовувати допоміжний клас для обгортання масиву. Ось приклад:

using UnityEngine;

[System.Serializable]
public class PlayerData
{
    public string playerName;
    public int playerLevel;
}

[System.Serializable]
public class PlayerDataArrayWrapper
{
    public PlayerData[] players;
}

public class TopLevelArrayExample : MonoBehaviour
{
    void Start()
    {
        // Serialization: Converting C# Object Array to JSON
        PlayerData[] players = new PlayerData[]
        {
            new PlayerData { playerName = "John Doe", playerLevel = 5 },
            new PlayerData { playerName = "Jane Smith", playerLevel = 8 }
        };

        PlayerDataArrayWrapper wrapper = new PlayerDataArrayWrapper { players = players };
        string json = JsonUtility.ToJson(wrapper);
        Debug.Log(json);

        // Deserialization: Converting JSON to C# Object Array
        string jsonData = "{\"players\":[{\"playerName\":\"John Doe\",\"playerLevel\":5},{\"playerName\":\"Jane Smith\",\"playerLevel\":8}]}";
        PlayerDataArrayWrapper deserializedData = JsonUtility.FromJson<PlayerDataArrayWrapper>(jsonData);

        foreach (var player in deserializedData.players)
        {
            Debug.Log($"Name: {player.playerName}, Level: {player.playerLevel}");
        }
    }
}

У наведеному вище прикладі клас 'PlayerDataArrayWrapper' використовується для обгортання масиву під час серіалізації та десеріалізації. Створення таких класів-оболонок є загальноприйнятою практикою при роботі з масивами об’єктів верхнього рівня в 'JsonUtility'.

Висновок

'JsonUtility' спрощує серіалізацію та десеріалізацію JSON безпосередньо без зовнішніх бібліотек. Використовуйте цей рідний підхід для простих операцій JSON у проектах Unity.

Рекомендовані статті
Unity Як створити шейдер
Обробка винятків і обробка помилок у Unity Code
Створення класів і об’єктів у Unity Code
Робота з масивами та списками в Unity Code
Методи обфускації Unity та захист від злому
Створення GrabPack в Unity за мотивами Poppy Playtime
Впровадження керування гарнітурою VR в Unity