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

z4bn682m  于 2023-10-23  发布在  其他
关注(0)|答案(3)|浏览(195)

我有一个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”未标记为可序列化。
避免这种错误的最佳方法是什么?多谢帮忙

e3bfsja2

e3bfsja21#

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

68bkxrlz

68bkxrlz2#

所有型号都必须将[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 damage;
}
2eafrhcq

2eafrhcq3#

我在尝试保存/加载更复杂的对象时看到过这个错误,比如GameObjects或扩展MonoBehaviour的脚本。
如果你需要保存一个游戏对象,你可能需要保存游戏对象的组件。然后在加载时创建一个示例并使用保存的数据填充组件。

相关问题