Unity在原项目下导入其他项目Package时文件覆盖或丢失

最近在Unity开发中遇到了一个关于.meta文件的问题。

一、问题如下:

新同事入职之后并没有在我们本来的项目里进行开发,而是每一个独立的模块都开启一个新的Unity工程进行开发,开发好之后,在Unity中导出unitypackage包,导入我们的项目中。

新建工程开发完第一个模块导出unityPackage包并且导入项目一切正常,但是新建项目进行第二个模块的开发的时候,在模块的工程中导出unityPackage包并无问题,但是在导入我们的项目中出现了如下问题:

这里写图片描述

ChildWalkingInTheForest文件夹下的在原来的项目中导出时本来是在CaveGame文件夹下,但是导入我们的项目中却跑到了ChildWalkingInTheForest文件夹下,如果我开启一个新的项目,导入这个package包,则一切正常,如下图:

这里写图片描述

二、原因分析:

unity中不论是文件还是文件夹都会生成一个对应的.meta文件,在.meta 文件中会有Unity自动生成的一个独一无二的guid值,因此问题有可能出现在导入过程中文件夹的.meta guid值重复了,导致本来应该在CaveGame文件夹下的一些文件和文件夹跑到了另一个文件夹下。

使用文本编辑器打开查看后,果然是guid重名,如图,这是CaveGame文件夹下的Animator文件夹和ChildWalkingInThwForest文件夹下的Animator文件夹的.meta文件对比。

这里写图片描述

可以看到guid和timeCreated是相同的,因此导致了上述问题。

三、解决方案

第一时间想到的解决方案就是直接将每个冲突的文件夹和文件对应的.meta文件中的guid手动修改,只需对每个guid修改一位即可,但是在修改完成之后,发现项目中的一些动画、prefab、场景中的关联都消失了,需要重新进行编辑。

因此这个方法对于较小的模块可以这样直接进行修改。但是如果遇到比较多的冲突,丢失的关联就会比较多,因此不推荐这种方法。

第二种方法,在google后找到一个类似的问题:
https://answers.unity.com/questions/460530/forcing-a-guid-to-regeneraterefresh.html
在回答中有提到重新为每个文件和文件夹生成guid.我并没有使用这个方法,因为我们的问题已经解决,如果你想尝试这个方法,一定要首先做好备份,防止出问题。

原文 https://blog.csdn.net/z3465875/article/details/78763135

猜你喜欢

转载自blog.csdn.net/qq_40985921/article/details/88990525