前情周知,meta文件最主要的guid,给unity的依赖关系提供凭证。同时也存了meta文件宿主对应的Imputer的设置信息。如果有abName也会存在meta里。
如图一个png文件的meta:
meta在什么时候会改变:
我测试了同版本和不同版本,手段是删除宿主。
步骤如下:
在一个空项目中拖入png
删除meta,再重新生成meta
guid没变。
宿主也删除,且重新拖入
guid还是没变。
关闭unity删除meta,重新用相同版本打开。
还是没变;
unity删除宿主,关闭unity,在没打开unity的时候拖入。
发生改变 .
unity删除宿主,关闭unity,在unity打开完成的时候拖入。
同样发送改变。
关闭unity,换版本打开。
没有变化。
删除meta,生成meta
序列化版本发送变化。
然后就基本和同版本的一样了。
改变目录,只改变宿主,不动meta:
guid没有变化
我在unity关闭的情况下换了图
但是名字没改,guid没变,这时候删除meta,重新生成,guid还是没变。
所以目前的结论,在unity打开状态的时候,untiy基本可以做到guid一致。但是在关闭状态下的某些操作(比如让unity知道了真实目录和他记录的不一致了,是不是有一种这样的情况),就会导致guid不一致。
这样的话,假如组里有人先移动了资源文件夹,但是这次操作不是复制,而是剪切,这样就会出现新位置的meta没变。可他确认为剪切是错的,应该复制,又在git里对改变了的文件revert了git认为删除的文件。这样在提交版本的时候就会出现两个一模一样的guid,也同时导致了别人pull下来的meta因为guid重复重新生成新的guid。