写一个unity的应用了 Serializable 属性的普通类
时间: 2024-05-13 14:18:33 浏览: 50
好的,下面是一个使用 Serializable 属性的普通类的示例:
```csharp
using System;
using UnityEngine;
[Serializable]
public class PlayerData
{
public string playerName;
public int playerLevel;
public float playerHealth;
public PlayerData(string name, int level, float health)
{
playerName = name;
playerLevel = level;
playerHealth = health;
}
}
```
在上面的示例中,我们定义了一个名为 PlayerData 的类,并使用 Serializable 属性来标记该类可序列化。该类包含三个公共字段:playerName、playerLevel 和 playerHealth。我们还定义了一个带有参数的构造函数,用于初始化这些字段。
我们可以在 Unity 中使用该类,并将其保存到文件中或在网络上发送。例如,我们可以创建一个名为 SaveManager 的脚本,用于管理游戏中的保存功能:
```csharp
using System.IO;
using UnityEngine;
public class SaveManager : MonoBehaviour
{
private string savePath = Application.persistentDataPath + "/playerData.dat";
public void SavePlayerData(PlayerData data)
{
FileStream stream = new FileStream(savePath, FileMode.Create);
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(JsonUtility.ToJson(data));
writer.Close();
}
public PlayerData LoadPlayerData()
{
if (File.Exists(savePath))
{
FileStream stream = new FileStream(savePath, FileMode.Open);
BinaryReader reader = new BinaryReader(stream);
string json = reader.ReadString();
reader.Close();
return JsonUtility.FromJson<PlayerData>(json);
}
else
{
Debug.LogError("Save file not found!");
return null;
}
}
}
```
在上面的示例中,我们定义了一个名为 SavePlayerData 的方法,用于将玩家数据保存到文件中。该方法使用 BinaryWriter 将 PlayerData 对象转换为 JSON 字符串,并将其写入文件流中。
我们还定义了一个名为 LoadPlayerData 的方法,用于从文件中加载玩家数据。该方法首先检查保存文件是否存在,如果存在,则使用 BinaryReader 读取文件流中的 JSON 字符串,并使用 JsonUtility 将其转换为 PlayerData 对象。
在 Unity 中,我们可以使用以下代码来测试 SaveManager:
```csharp
using UnityEngine;
public class TestSaveManager : MonoBehaviour
{
private SaveManager saveManager;
private void Start()
{
saveManager = GetComponent<SaveManager>();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.S))
{
PlayerData playerData = new PlayerData("John", 10, 100.0f);
saveManager.SavePlayerData(playerData);
Debug.Log("Player data saved!");
}
if (Input.GetKeyDown(KeyCode.L))
{
PlayerData loadedData = saveManager.LoadPlayerData();
if (loadedData != null)
{
Debug.Log("Player name: " + loadedData.playerName);
Debug.Log("Player level: " + loadedData.playerLevel);
Debug.Log("Player health: " + loadedData.playerHealth);
}
}
}
}
```
在上面的示例中,我们定义了一个名为 TestSaveManager 的脚本,用于测试 SaveManager。该脚本在 Start 方法中获取 SaveManager 组件,并在 Update 方法中检测用户按下 S 键来保存玩家数据,或按下 L 键来加载玩家数据。如果成功加载玩家数据,则在控制台中打印玩家名称、等级和健康值。
希望这个示例能够对你有所帮助!
阅读全文