这是一个很严重的bug,我在编辑器操作prefab好好的,主要是查看,主界面预设体和子级预设体来回切换过几次,期间还通过编辑器脚本resetInEditor(),进行过脚本属性的挂载,一切都很正常,就不知道哪次双击切换了预设体之后,突然主界面的预设体报错打不开,提示节点已被destroy之类的错误,重启多次仍然报错无法打开。
错误产生的直接原因,主界面预设体包含一个子预设体,并且在主界面中,把子预设体勾选了同步。
同步勾选之后没有什么问题,我勾选了之后还特地马上测试了一下,修改子预设体将某个节点隐藏,主界面的预设体可以保持同步。
主界面的预设体报错完全打不开,我慌了,因为界面文件还在本地开发,没有提交到版本控制,如果预设体坏了,意味着我需要重新拼界面,但是我还是想自救一下。以下是自救的过程,最后成功恢复了界面。
首先我用文本打开主界面预设体,搜索子预设体的uuid

注意这里有一个__id__:67的属性
在主界面预设体中,我已经将这个节点绑定到了脚本的属性@property上面,接着我再次搜索这个绑定的属性名称
上图的selfHead就是脚本里面声明的property属性,我发现这个__id__是70,感觉有点不对劲,为什么不是前面的67(第一个图中圈选出来了)
并且我搜索了一下"id": 70,发现就只出现在这一处,也就是说70的id是没有任何对应资源的
然后我把下面的
“selfHead”: {
“id”: 70
}
手动改成
“selfHead”: {
“id”: 67
}
保存之后,回到编辑器,再次双击主界面的预设体,它竟然成功打开了,只不过子预设体已经丢失了,只有一个同名的空节点。
那么这个id为什么会对应不上呢?
我百分百保证,在之前没有手动改过预设体的文本文件。也不知道这个__id__的作用,在编辑器脚本中也没有引用过这个__id__属性。
唯一可能有关联的操作就是,我不是手动拖这个节点绑定到@property属性上去的,而是通过主界面挂载的脚本中的resetOnEditor()函数执行的绑定,但这个并没有涉及到__id__的访问。
所以,这是一个未知的bug,而且后果比较严重,直接导致预设体打不开,编辑器假死。
现在我已经不敢再去勾选预设体同步的选项了,真怕它把我的界面搞坏。
希望官方能解决这个问题。



