Unity的metadata分析

1. metadata的名字是*.meta里的guid。

2. metadata是给编辑器使用的,跟inspector有关,跟打包assetBundle无关。

3. 因为metadata跟inspector有关,如果手动删除了,那么会导致编辑器中无法识别该资源。

4. 当metadata被手动删除后,如果该资源正在打开,则可以通过修改保存来重新生成metadata。如果没有被打开,那则需要重新打开编辑器,或者修改.meta文件来让metadata重新生成。

5. 如果*.meta里的guid发生变化,旧的metadata会被删掉,然后创建新的。

可以推断,在unity启动时,会检查metadata是否完整。当选中资源时,会加载metadata到内存中,并且一直维护着,保证metadata与资源匹配。

资源的meta文件中的guid,如果在当前工程存在相同的guid时,会被自动修改成一个新的guid。(这是.meta文件被自动修改的一个原因)

无论怎么操作metadata,都不会影响bundle的生成。(试过把metadata删掉/清空文件内容)

我们遇到一个无法解释也不好重现的问题,在打包机上,会打出只有manifest,却没有bundle,而且manifest里的crc值为0。删掉metadata后,重新打包,则一切正常。只能以后再观察。

当前的处理方法是在打包bundle后,检查manifest是否也存在同名的bundle,如果出现manifest但缺少bundle,则中断打包流程。

补充一点,路径Library/assetDatabase3,是类AssetDatabase的数据支撑。我本来猜测是它保证了mete被删除后,仍能创建回拥有相同guid的meta文件。

但是测试后发现,单独删除它,在重启unity后会自动生成回来,而且被删的meta也会恢复回来,guid不变。

但是删除整个Library,即便Library重建回来,但是被删的meta再创建出来后,guid不再一样。

你可能感兴趣的:(Unity的metadata分析)