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

报错信息

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的一种方式。因此GUIDType属性并没有赋值
在保存场景进行序列化的时候,Unity会对GUID进行检查,没有赋值的GUIDType并不能通过检查。最终报错。

4. 解决方案

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值