美文网首页征服Unity3dunity3D技术分享
【unity】高版本转低版本预制物体丢失

【unity】高版本转低版本预制物体丢失

作者: 黒可乐 | 来源:发表于2018-02-23 09:53 被阅读28次

    写在前面

    公司之前换了一次unity版本,从5.4.3提升到了5.6.4,这样就造成了一个问题。公司之前用5.4.3打包上架的安装包,如果你需要热更一个预制物体的话,这个时候你的工程又是在5.6.4版本打开的话,修改预制物体。然后热更上去的话。要么出现闪退的情况要么出现预制物体无法加载。


    闪退的日志

    这里显示是unity的libunity.so的问题,查了一下可能是不能用高版本的预制物体在低版本的包里使用。然后在5.4.3编辑器下拖出在5.6.4编辑器下修改过的预制物体会出现如图:


    名字丢失
    当然还有一些自定脚本需要指定一些公有变量,也会丢失。问题差不多就会出现这些。使用的是UGUI,指定的图片也没有丢失。

    解决方案

    最开始是想要直接使用prefab文件,直接修改文本中的值就可以了。


    在5.4.3版本中直接就打开prefab文件文本结构(错误)

    那么正确的的文本结构是什么样的呢?
    我们这里使用手动把名字丢失的gameobject加上,或者写一个小工具把高版本中的名字记录下来,然后再低版本中把记录读出来并赋值。

    修改正确的prefab文本结构

    我们可以对比一下两个版本的prefab文件的文本结构,有一句是不一样的。就是serializedVersion的值。之前的版本是5,正确的版本是4。那么我们看看其他正确的预制物体的serializedVersion值是多少呢?正确的是4。这个的意思是序列化版本吧。如果我们把所有serializedVersion : 5改成4的话,是不是就正确了呢?实验结果是改完了确实正确了。这里的原理还没有看明白,网上也没有找到相应的资料。不过这样改了确实是对了。猜测应该是unity各个版本对预制物体的序列化的方式是不同,不能向上兼容吧。

    这里解决自定义脚本公共变量丢失的方法:
    我们可以在5.6.4版本中把以前的预制物体重新命名新建一个,然后把这个新建的预制物体导入新版本这里就可以了。

    工具地址

    相关文章

      网友评论

        本文标题:【unity】高版本转低版本预制物体丢失

        本文链接:https://www.haomeiwen.com/subject/rdhztftx.html