Cara Kerja Bawaan dengan JSON dalam Kode Unity
JSON (JavaScript Object Notation) adalah format pertukaran data yang banyak digunakan, dan mengintegrasikannya ke dalam Unity dapat berguna untuk menangani konfigurasi, menyimpan progres game, atau bertukar data dengan layanan eksternal. Panduan ini memandu Anda memahami dasar-dasar bekerja dengan JSON di Unity.
Langkah 1: Memahami JSON
JSON terdiri dari pasangan nilai kunci dan struktur bersarang.
Langkah 2: Bekerja dengan JSON dalam Kode Unity
Unity menyederhanakan serialisasi dan deserialisasi JSON melalui kelas 'JsonUtility'. Panduan ini menunjukkan langkah-langkah dasar untuk bekerja dengan JSON di Unity tanpa perpustakaan eksternal.
- Buat Struktur JSON:
{
"playerName": "John Doe",
"playerLevel": 5,
"inventory": ["sword", "shield"]
}
- Serialisasi - Mengonversi Objek C# ke 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);
}
}
- Deserialisasi - Mengonversi JSON ke Objek 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));
}
}
Keterbatasan yang Diketahui
'JsonUtility' tidak secara langsung mendukung serialisasi dan deserialisasi array objek tingkat atas (misalnya, '[{},{},{}]') tanpa kelas pembungkus. Untuk mengatasinya, Anda bisa menggunakan kelas pembantu untuk membungkus array. Berikut ini contohnya:
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}");
}
}
}
Pada contoh di atas, kelas 'PlayerDataArrayWrapper' digunakan untuk membungkus array saat membuat serialisasi dan deserialisasi. Merupakan praktik umum untuk membuat kelas pembungkus seperti itu ketika menangani array objek tingkat atas di 'JsonUtility'.
Kesimpulan
'JsonUtility' menyederhanakan serialisasi dan deserialisasi JSON secara langsung tanpa perpustakaan eksternal. Gunakan pendekatan asli ini untuk operasi JSON langsung di proyek Unity.