繁体   English   中英

汇编中的类型未标记为可序列化的 Unity

[英]Type in assembly is not marked as serializable Unity

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

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

我在这个问题上苦苦挣扎。 我的回答不是很准确,但我希望它会有所帮助。 我记得,MonoBehaviour 是由 Unity 团队使用 C++ 创建的,它有很多隐藏属性。 它不能被序列化,就像 GameObject 不能一样。 因此,由于您的脚本不大,我可以推荐这个:在您的 PlayerDistanceScript 文件中创建新的非 MonoBehaviour class。 从此脚本中删除您的属性并将它们添加到创建的 class。 然后,在 PlayerDistanceScript 中创建您创建的 class 的 object 并对其进行序列化,在必要时使用其属性。 不要忘记标记 class 及其属性可序列化。 如果您必须像文本一样序列化 Unity 类型 object,则不能直接对 go 进行序列化。 如果你真的需要它,你可以把它的key值保存起来,比如position,size等,然后序列化。 祝你好运。

所有型号都必须在 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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM