Méthode intégrée de travail avec JSON dans Unity Code

JSON (JavaScript Object Notation) est un format d'échange de données largement utilisé, et son intégration dans Unity peut s'avérer puissante pour gérer les configurations, sauvegarder la progression du jeu ou échanger des données avec des services externes. Ce guide vous explique les principes fondamentaux de l'utilisation de JSON dans Unity.

Étape 1: Comprendre JSON

JSON se compose de paires clé-valeur et de structures imbriquées.

Étape 2: Travailler avec JSON dans le code Unity

Unity simplifie la sérialisation et la désérialisation JSON grâce à sa classe 'JsonUtility'. Ce guide montre les étapes de base pour travailler avec JSON dans Unity sans bibliothèques externes.

  • Créez une structure JSON:
{
  "playerName": "John Doe",
  "playerLevel": 5,
  "inventory": ["sword", "shield"]
}
  • Sérialisation - Conversion d'un objet C# en 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);
    }
}
  • Désérialisation - Conversion de JSON en objet 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));
    }
}

Limites connues

'JsonUtility' ne prend pas directement en charge la sérialisation et la désérialisation de tableaux d'objets de niveau supérieur (par exemple, '[{},{},{}]') sans classe d'encapsulage. Pour contourner ce problème, vous pouvez utiliser une classe d'assistance pour envelopper le tableau. Voici un exemple:

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}");
        }
    }
}

Dans l'exemple ci-dessus, la classe 'PlayerDataArrayWrapper' est utilisée pour envelopper le tableau lors de la sérialisation et de la désérialisation. Il est courant de créer de telles classes wrapper lorsqu'il s'agit de tableaux d'objets de niveau supérieur dans 'JsonUtility'.

Conclusion

'JsonUtility' simplifie la sérialisation et la désérialisation JSON directement sans bibliothèques externes. Utilisez cette approche native pour les opérations JSON simples dans les projets Unity.

Articles suggérés
Une approche pratique du code modulaire dans Unity
Travailler avec des tableaux et des listes dans Unity Code
Création d'un effet Bullet Time dans Unity
Utilisation du contrôleur Runtime Animator dans Unity
Implémentation de la téléportation dans Unity
Comment changer la résolution de l'écran dans le jeu Unity
Un guide sur le chargement de scènes dans Unity