unity序列化

介绍

序列化是将数据结构或对象转换为可存储或传输格式的过程。在Unity中,序列化通常用于将脚本组件中的变量保存到场景或预制件中,或者将数据存储在文件中以便稍后读取。Unity提供了几种序列化方式,本文将介绍其中常见的几种。

方法

1. 序列化字段

在Unity中,可以使用SerializeField属性将一个字段标记为可序列化的。例如:

public class Player : MonoBehaviour
{
    [SerializeField]
    private string playerName;
    [SerializeField]
    private int playerLevel;
}

在这个例子中,playerName和playerLevel字段都被标记为可序列化的,因此它们的值可以在场景或预制件中保存和加载。值得注意的是,SerializeField只能用于字段,不能用于属性。

2. Json序列化

Json序列化是一种将对象转换为Json格式的序列化方式。Unity内置了JsonUtility类来进行Json序列化。例如:

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

public class GameController : MonoBehaviour
{
    private PlayerData playerData = new PlayerData();

    private void SavePlayerData()
    {
        string json = JsonUtility.ToJson(playerData);
        // 将json字符串保存到文件中
    }

    private void LoadPlayerData()
    {
        // 从文件中读取json字符串
        playerData = JsonUtility.FromJson(json);
    }
}

在这个例子中,PlayerData类被标记为可序列化的,因此JsonUtility可以将它转换为Json格式的字符串。在保存和加载数据时,可以使用JsonUtility的ToJson和FromJson方法。

3. Binary序列化

Binary序列化是将对象转换为二进制格式的序列化方式。Unity内置了BinaryFormatter类来进行Binary序列化。例如:

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

public class GameController : MonoBehaviour
{
    private PlayerData playerData = new PlayerData();

    private void SavePlayerData()
    {
        BinaryFormatter formatter = new BinaryFormatter();
        MemoryStream stream = new MemoryStream();
        formatter.Serialize(stream, playerData);
        // 将stream中的数据保存到文件中
    }

    private void LoadPlayerData()
    {
        // 从文件中读取二进制数据到stream中
        BinaryFormatter formatter = new BinaryFormatter();
        MemoryStream stream = new MemoryStream(data);
        playerData = (PlayerData)formatter.Deserialize(stream);
    }
}

在这个例子中,可以使用BinaryFormatter将PlayerData对象转换为二进制格式,并将数据保存到内存流中。在保存和加载数据时,可以使用Serialize和Deserialize方法。

举例子

下面是一些常见的代码例子,演示了如何使用Unity中的序列化:

1. 序列化字段

public class Player : MonoBehaviour
{
    [SerializeField]
    private string playerName;
    [SerializeField]
    private int playerLevel;
}

在这个例子中,playerName和playerLevel字段都被标记为可序列化的。

2. Json序列化

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

public class GameController : MonoBehaviour
{
    private PlayerData playerData = new PlayerData();

    private void SavePlayerData()
    {
        string json = JsonUtility.ToJson(playerData);
        // 将json字符串保存到文件中
    }

    private void LoadPlayerData()
    {
        // 从文件中读取json字符串
        playerData = JsonUtility.FromJson(json);
    }
}

在这个例子中,JsonUtility用于将PlayerData对象转换为Json格式的字符串,并将字符串保存到文件中。在加载数据时,可以使用JsonUtility的FromJson方法将字符串转换回PlayerData对象。

3. Binary序列化

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

public class GameController : MonoBehaviour
{
    private PlayerData playerData = new PlayerData();

    private void SavePlayerData()
    {
        BinaryFormatter formatter = newBinaryFormatter();
        MemoryStream stream = new MemoryStream();
        formatter.Serialize(stream, playerData);
        // 将stream中的数据保存到文件中
    }

    private void LoadPlayerData()
    {
        // 从文件中读取二进制数据到stream中
        BinaryFormatter formatter = new BinaryFormatter();
        MemoryStream stream = new MemoryStream(data);
        playerData = (PlayerData)formatter.Deserialize(stream);
    }

在这个例子中,BinaryFormatter用于将PlayerData对象转换为二进制格式,并将二进制数据保存到内存流中。在加载数据时,可以使用BinaryFormatter的Deserialize方法将二进制数据转换回PlayerData对象。

你可能感兴趣的:(解决问题,unity,游戏引擎)