最近项目遇到奇怪的问题,每次保存场景就会有大量的报错 项目使用了的序列化模式是Visible Meta Files + Force Text。所以可以直接查看文件来查看具体的错误来源。 既然是Unity序列化的问题,那我们可以学习一下相关的知识。 推荐Unity文件、文件引用、meta详解 - CodeGize - 博客园
报错的数据为texture: {fileID: 3, guid: 00000000000000000000000000000000, type: 0}
我们通过--- !u!213 &390097中的FileID390097查找引用。
- target: {fileID: 114597316970944168, guid: a4b3c9392426a9046b025bb56cc1ceca, type: 3} propertyPath: Icon.Array.data[3] value: objectReference: {fileID: 390097}发现他在一个Icon的列表当中存储着。查看代码之后发现这个列表是在编辑器生成的。而报错的Sprite是一个通过SpriteAtlas.GetSprite克隆出来的实例。m_AtlasRD我猜测是作为SpriteAtlas内部存储结构。他的fileID是运行时对应SpriteAtlas的一种方式。因此GUID和Type属性并没有赋值。 在保存场景进行序列化的时候,Unity会对GUID进行检查,没有赋值的GUID和Type并不能通过检查。最终报错。
所以解决方案就很简单啦,不要保存SpriteAtlas.GetSprite克隆出来的实例就可以了。