我有一个MonoBehaviour类PlayerDistanceScript,其中包含玩家变量和一些游戏逻辑。x1c 0d1xx 1c 1d 1x我用它来传递分数给SaveSystem类:
,在里面我调用PlayerData构造函数来传递播放器数据。
当我试图保存数据到一个文件“formatter.Serialize(stream,data);“正在向我显示错误:SerializationException:程序集“Assembly-CSharp,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null”中的类型“PlayerDistanceScript”未标记为可序列化。
避免这种错误的最佳方法是什么?多谢帮忙
3条答案
按热度按时间e3bfsja21#
我努力解决这个问题。我的回答不是很准确,但我希望它会有所帮助。据我所知,MonoBehaviour是由Unity团队使用C++创建的,它有一堆隐藏属性。它不能被序列化,就像GameObject不能一样。既然你的剧本不大,我可以推荐这个:在PlayerDistanceScript文件中创建新的非MonoBehaviour类。从这个脚本中删除你的属性,并将它们添加到创建的类中。然后,在PlayerDistanceScript中创建您创建的类的对象并序列化它,在必要时使用其属性。不要忘记将该类及其属性标记为可序列化。如果你必须序列化Unity类型的对象,比如Text,你不能直接去做。如果你真的需要它,你可以保存它的关键值,如位置,大小等。并将其序列化。祝你好运
68bkxrlz2#
所有型号都必须将
[System.Serializable]
设置在类的顶部。举例来说:
2eafrhcq3#
我在尝试保存/加载更复杂的对象时看到过这个错误,比如GameObjects或扩展MonoBehaviour的脚本。
如果你需要保存一个游戏对象,你可能需要保存游戏对象的组件。然后在加载时创建一个示例并使用保存的数据填充组件。