[Unity开发记录] 错误:Could not extract GUID in text file *.unity at line ???

    xiaoxiao2024-12-26  73

    1. 问题和基础知识准备

    最近项目遇到奇怪的问题,每次保存场景就会有大量的报错 项目使用了的序列化模式是Visible Meta Files + Force Text。所以可以直接查看文件来查看具体的错误来源。 既然是Unity序列化的问题,那我们可以学习一下相关的知识。 推荐Unity文件、文件引用、meta详解 - CodeGize - 博客园

    2. 打开.unity文件查看信息。

    --- !u!213 &390097 Sprite: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Power m_AtlasTags: - Ui m_SpriteAtlas: {fileID: 4343727234628468602, guid: 1829e7d3505a379468f2a0b1761c4729, type: 2} m_AtlasRD: serializedVersion: 3 texture: {fileID: 3, guid: 00000000000000000000000000000000, type: 0} alphaTexture: {fileID: 0}

    报错的数据为texture: {fileID: 3, guid: 00000000000000000000000000000000, type: 0}

    3. 错误分析

    我们通过--- !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并不能通过检查。最终报错。

    4. 解决方案

    所以解决方案就很简单啦,不要保存SpriteAtlas.GetSprite克隆出来的实例就可以了。

    最新回复(0)