Course contentsShow
← Unity Game Development
Lesson 249 of 8284. Prefabs and Data ManagementFree lesson

Serialization Techniques for External Data

Learn to serialize ScriptableObject data into JSON or XML formats to support external balance editing and data persistence.

In this lesson, you will learn how to bridge the gap between Unity’s internal ScriptableObject assets and external files like JSON to allow for game balance adjustments without needing to recompile your project.

Why Export Data?

While ScriptableObjects are perfect for storing data inside the Unity Editor, they are locked within the project assets once the game is built. By serializing your ScriptableObject data into a standard format like JSON, you can store that data in a text file outside the build. This allows game designers to tweak values—like weapon damage or enemy health—using a simple text editor, even after the game has been deployed to a player's machine.

Converting to JSON

Unity provides a built-in tool called JsonUtility to turn your data containers into readable strings. To do this, your ScriptableObject data needs to be structured into a serializable class that JsonUtility can process.

Here is a simple way to export your data:

using UnityEngine;
using System.IO;

public class DataExporter : MonoBehaviour
{
    public ItemData myItemData; // Reference to your ScriptableObject

    public void ExportToJson()
    {
        // Convert the object to a JSON string
        string json = JsonUtility.ToJson(myItemData, true);
        
        // Write the string to a persistent file path
        string path = Application.persistentDataPath + "/ItemData.json";
        File.WriteAllText(path, json);
        
        Debug.Log("Data exported to: " + path);
    }
}

From External File to Game

Once you have your JSON file, you can "Deserialize" it back into your game during runtime. You simply read the text file using File.ReadAllText() and use JsonUtility.FromJsonOverwrite() to update your existing ScriptableObject instance. This creates a powerful workflow where the game loads external configurations upon startup, effectively overriding the default values baked into your project.

This technique is essential for balancing games because it detaches the "data" (numbers and settings) from the "code" (logic and behavior), allowing for rapid iteration and community-driven modifications.

Key Takeaway: By serializing your ScriptableObject data into JSON, you create an external data layer that enables balance updates and configuration changes without requiring a new game build.