程序集中的类型未标记为可序列化的 Unity

Type in assembly is not marked as serializable Unity

我有一个 MonoBehaviour class PlayerDistanceScript,它包含玩家变量和一些游戏逻辑。 我正在使用它将分数传递给 SaveSystem class: 在其中,我要求 PlayerData 构造函数传递播放器数据。 当我尝试将数据保存到文件“formatter.Serialize(stream, data);”时向我显示错误:SerializationException:程序集 'Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' 中的类型 'PlayerDistanceScript' 未标记为可序列化。

避免此错误的最佳方法是什么?感谢帮助

我一直在努力解决这个问题。我的回答不是很准确,但希望对你有所帮助。 我记得,MonoBehaviour 是由 Unity 团队使用 C++ 创建的,它有一堆隐藏的属性。它不能被序列化,就像 GameObject 不能,例如。所以,由于你的脚本不大,我可以推荐这个: 在您的 PlayerDistanceScript 文件中创建新的非 MonoBehaviour class。从此脚本中删除您的属性并将它们添加到已创建的 class。然后,在 PlayerDistanceScript 中创建一个对象 class 并序列化它,在需要的地方使用它的属性。不要忘记标记 class 及其属性可序列化。 如果你必须序列化 Unity 类型的对象,比如 Text,你不能直截了当。如果你真的需要它,你可以保存它的关键值,如位置、大小等,并序列化它们。 祝你好运。

所有模型都必须在 class 之上设置 [System.Serializable]。

例如:

[System.Serializable]
public class PlayerModel 
{
    public string name;
    public List<Items> items = new List<Items>();
}

[System.Serializable]
public class Items
{
   public string name;
   public float dammage;
}