【技术博客】Unity脚本出现missing时的解决方法 | week15

在做unity项目时,我们可能会遇上如下所示的脚本丢失问题:

这个问题出现在我们软工使用git进行合作开发时,最后经过排查,发现是.meta文件出现了问题,原因是我们的gitignore中不小心加入了*.meta(直接使用了官方的ignore文件没有注意到这个),然后在开发时,pull别人的commit时,meta文件没有解决完冲突就保存到本地了:

可以看到这个文件里存了一堆git的冲突信息,因此如果出现了missing的情况,可以先去自己的.meta文件里,看看是否有不恰当的git冲突信息,如果有的话可以像我上面一样解决便好了。

当然只修改这个不一定完全解决问题,有可能guid出现了错乱。下面讲讲手动改guid来恢复脚本,这样就不用一个一个脚本重新拖了,怪麻烦的。

手动改guid以正确加载miss脚本

当然,如果没有这些git导致的原因,还是出现了miss的话,那么便是脚本的meta中的guid出现了问题。我们首先简单了解一下meta的原理:

可以看到这个脚本实际上有一个guid,.unity文件实际上就是通过这个来找脚本的。因此我们如果已知有很多地方都使用了这个脚本,可以先去一个miss的地方,将这个脚本拖到miss的地方去,然后查看.unity文件中变化的地方:

1、将正确的脚本拖到miss的地方:

可以看到直接拖过去,脚本的一些设置还是null的,如果要全部重新拖一遍的话,非常麻烦。但是我们下面直接修改guid来解决这个问题。

2、查看.unity文件的变化

可以看到,实际上这个场景的.unity文件中脚本的映射guid变化了,场景之所以找不到脚本,是因为脚本的.meta文件里的guid变化了,我们只需要将这个guid改为场景中之前的guid即可,比如现在场景的变化是:

  从
  m_Script: {fileID: 11500000, guid: 4324dfer1453a2343445596123450cba, type: 3}
  变化为了
  m_Script: {fileID: 11500000, guid: 693980ce1453a064e9a5596448770cba, type: 3}

3、修改脚本.meta中的guid,同时复原.unity文件

将693980ce1453a064e9a5596448770cba改为4324dfer1453a2343445596123450cba即可,注意要把.unity的文件改动清除,因为我们第2步只是为了找到脚本正确的guid。

现在引用了这个脚本的场景都恢复正常了,因为可以通过之前的guid找到脚本了,脚本中的参数也不会清空。

posted @ 2022-06-11 16:47  头发茂盛队  阅读(1025)  评论(0编辑  收藏  举报