怎么修改artifact_升级AssetDatabase v2时候遇到的artifact 文件0字节问题

在升级Unity的AssetDatabase到V2时,遇到Library中artifact文件变为0字节,导致项目报错。该问题可能由下载不完整或导入过程异常引起。解决方案包括从源头修改Unity引擎源码和cacheserver,或者通过脚本定位0字节文件,删除并重新import对应Asset以修复问题。
摘要由CSDN通过智能技术生成

(声明:本文章所有用到的图片和源码,只为了学习和研究用途,未经我同意,不得进行转载或者其他用途,推荐大家购买Unity正版源码

1.问题描述

由于升级到了2019.3.0f6,一打开项目就会问是不是要升级V2, 说V1已经过时了,所以决定升级到V2。中间cacheserver的其他问题就不多说了,感觉有时候能用上cacheserver,有时候还得自己干活import,最终还是用上了。(使用下来看,目前还是很不稳定,建议大家再等等后面的版本)

但是中间出现了个问题,再进入项目后,报了类似这样的错误:

064e841693e3176ac8d1ae9e1bede8ea.png

,有的会报下具体是哪个资源,有的只有这么一句话,大家也知道,这个Library里面的东西是中间产物的cache, 以往是全删除了再来一次,但是这次发现不行了。再进去看下具体的文件,大家就可以发现一个问题,

799618216f6a2bea52e598d20a10ce8d.png

这个中间文件的字节是0. 最最麻烦的是,你找到了这个文件,但是你不能直接删除,

直接删除会导致你再次启动Unity的崩溃(因为unity内部有一些关联设置的,但是没判断好,直接gg),另外,你再reimport也是没有用的,0还是0,就是这么坚强。

2.问题研究

具体怎么产生的,大家可以看下RemoteAssetCache.cpp看下,比较怀疑是下载有问题,它是下载到Temp, 然后Move到LIbrary目录,然后加入到AddToArtifactDb,但也可能是自己Import过程中突然个屁了导致屁股没擦干净,源代码里面大家可以仔细看下,但是整个的流程还是比较复杂和长的。

3.问题解决

3.1 从根源上解决

这个可能要unity引擎源码和cacheserver都要一起修改下,加一些确认重传以及对0字节的一些错误处理等,这个后面慢慢研究下。

3.2 清理错误

这个是目前简单的解决方式,以保证项目正常启动和运行,不然一直报错,也还比较方便的。

解决方法其实很简单,就是找到为0的artifact里的文件,然后找到这个文件对应的资源asset,然后reimport,但是unity里面artifacts里看到的文件名,并不是直接的guid,这里需要个转换。所以我们主要的问题是怎么根据0字节的文件去找到他对应的

GUI.

大家可以看下ArtifactGarbageCollection.cpp文件

这个函数是unity启动项目的时候,去清理无用的artifact文件的,我们可以借用下。

后面的具体的path==是清理一些零星的错误用的,因为我本机扫出来可能没有,但是别人机器上有,所以简单加下,类似黑名单,这样,你就可以得到所有的有问题的GUID了,保存到一个文件。

8afc5bcaaa4539f6397d8e9ee0b87334.png

主要是两步,删除为0的artifact文件,然后强制import一遍对应的Asset,运行完脚本,应该就可以修复了。有的可能完事后重新打开下unity。

(声明:本文章所有用到的图片和源码,只为了学习和研究用途,未经我同意,不得进行转载或者其他用途,推荐大家购买Unity正版源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值