Unity - GUID冲突的避免操作
Posted Jave.Lin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity - GUID冲突的避免操作相关的知识,希望对你有一定的参考价值。
这个内容记录便于避免 GUID 冲突,无论是对,程序(有些程序新人也不懂)、策划、美术、外包、外派,都同样有效
如果不限制大家对 unity 资源的操作方式,会很容易导致 GUID 冲突,一旦 import 进来,将导致各种 unity 资源引用丢失的问题
如果项目人员多的时候,使用 unity 开发的话,就一定要先给大家培训,了解这个问题
unity GUID 冲突的误操作的几个可能点作:
-
不能在 资源管理器(就是windows操作系统的文件夹下复制的方式添加 *.meta)
-
在 unity project 视图下 rename(重命名)后,先提交 删除的文件,和增加的文件,然后再修改,后续再提交修改的内容
- rename(重命名) 对于svn就是:先删除原来文件名的文件,再增加新的文件名的文件,所以一定要记得提交删除的 和 添加的文件,同时一起提交
-
如果要更新 svn资源,并且在 unity 中有对已经在 svn 中有版本管理的文件 rename(重命名)操作了,那么记得要先执行上面第 2 点的处理,再更新 svn
- rename(重命名)已经提交过svn的资源,不要马上更新,记得先提交rename的 删除和增加的文件,再更新,原因:rename资源后,资源对应的*.meta中的 GUID 是不变的,如果你在 svn update(更新)的话,那么原来的文件和*.meta都会重新下载下来,那么这个时候就会有两个*.meta 文件的 GUID 是一样的问题,比如:A.mat, A.mat.meta, 两个文件,A.mat.meta 中的 GUID 假设为 111,这时如果你在 unity project 视图中 重命名为:A_01.mat, A_01.mat.meta,这时 A_01.mat.meta 中的 GUID 还是 111,然后这时还没提交 删除原来的 A.mat, A.mat.meta 和 增加 A_01.mat, A_01.mat.meta 文件的话,然后再马上更新,这时本地就会出现四个文件:A.mat, A.mat.meta, 和 A_01.mat, A_01.mat.meta,其中 A.mat.meta 和 A_01.mat.meta 中的 GUID 是一样的,就会导致 GUID 冲突
-
rename 只能处理自己的文件,别人的文件不要rename(复制别人的资源,可以rename,比如,自己在 unity 中 ctrl + d 复制出来的文件,重命名)
-
除了 资源管理器复制 meta,rename then update 的重复 meta,等操作,还有一些其他方式导致 meta 复制,或是出现了 GUID 相同的才操作都会有这个问题,比如,别人修改了一个A.mat.meta 的名字为:B.mat.meta ,然后(通过QQ,微信,钉钉,飞鸽,等方式)发给你,你再导入项目的话,一样会有GUID 冲突
Unity工程中 .Meta 文件
在项目提交的时候,尤其是导入了很多资源的情况下会有很多的.meta文件,那么这些文件是否一定要上传?
---------------------
在游戏开发过程中不可避免的要用到版本控制工具,如SVN,git,也因此需要理解Meta文件的作用。
在游戏场景中引用一个游戏资源,Unity并不直接按照文件路径和名称,而是使用一个独一无二的GUID来指向工程里的该资源文件。
GUID储存在Unity工程为每个资源和文件夹生成的Meta文件里。
使用GUID的好处就是,即使你移动、重命名或者修改资源的内容,这个资源仍然可以通过GUID来被引用(只要GUID不变,资源就能够被引用)。
缺点是你必须明确的意识到Meta文件是被关联到特定的资源上的,如果删除了一个meta文件,Unity会认为原始的资源文件已经被删除,然后为这个“新的”资源文件生成一个新的GUID。这就是游戏场景中的资源引用中断的最常见原因。
除了GUID,meta文件还存储了有关资源导入的信息。例如,贴图资源在导入时可以当作标准贴图、法线贴图、GUI贴图、cookie或者光线贴图。这些导入设置都会被存储在meta文件里。
也因此有的时候报错显示“Missing Script”的问题,也有可能是某一个资源的meta文件没有上传,或者丢失。
---------------------
以上是关于Unity - GUID冲突的避免操作的主要内容,如果未能解决你的问题,请参考以下文章