3.5.1预制体相关的改动并不多,方便的话,出错的时候把错误和相关资源上传一下,我这边会立刻定位问题。
好的,预制体已经可以保存设置了
现在只解决了一小部分问题,还希望引擎组能早点找到并修复这个BUG
已经重做,想要复现,只需要在更改预制体后不断的按ctrl z,特别是内嵌预制体。分分钟出问题
现在还有一个情况,子预制件里的某个节点有widget组件,在父预制件里面直接修改坐标是不生效的,必须手动修改(复制都不行)widget的值来调整坐标才能保存生效;
经过git变动发现,直接修改坐标值,prefab里面的坐标value变了,但是节点的widget组件没有被加到"propertyOverrides",这个值的变动没有被记录,关闭预制件再次打开就还原了;
直接修改widget的值,widget才会被正确添加到"propertyOverrides"中去;
目前使用的是3.5.1;不知道这是bug还是机制;
就算是机制的话也建议修改一下,编辑器里面的值都变了,保存后不生效,这也太奇怪了
父预制直接改坐标,本来就不会影响到子 widget 啊
但是编辑器属性面板已经改了
可能我描述的不是很清楚;
A B 两个预制件,A拖到B上,A有widget组件;
在B里面修改A的坐标保存;(此时A的position和widget在编辑器面板都已修改);
关闭B再打开,A的坐标被还原成未修改前的;
你反馈的这个问题确实存在,目前需要你手动改一下widget的值才能正常保存,我们会在后续版本中修复这个问题,感谢你的反馈~
我再反馈一个,这个问题更严重:
A B 两个预制件,A有子节点a,a有widget组件;
A拖到B上(没有任何修改),此时B里面的a节点的name就会被标记为重写;
此时再修改A里面a的名字,b就同步不了了;
目前发现的有widget组件,layout组件(type不为none就行);猜测可能这两个组件会在拖入的时候导致某些属性的变化;
但还是感觉不合理,我就拖进去啥也没干;即使某些属性标记为重写了,名字也不能吧;
可能还有其他问题,没有深究,现在我们的做法就是任何子prefab的修改,都要去父prefab手动点击一下同步;需要有差异化的通用prefab很难维护。
针对这个顺带提个建议,引用的prefab被重写的节点和属性能不能给个标识,针对被修改的点单独能还原到资源(目前只能整个预制件同步还原)
这个需求我们有计划加入,但是具体哪个版本还未确认
我测试了一下,test节点在A预制体中,name是不会被重写的,方便的话提供一下能复现的两个预制体资源吧
3.6已经修复了,我看了下3.5.1确实有问题
3.6确实没问题,但是我试了下3.5.1的直接升级到3.6,之前有问题的不会修复;
3.5有办法解决这个问题么;目前项目已经上线,短期内不方便升级;
后续升级也得修复这个问题;预制件比较多,删了重做工作量有点大;
我试了下直接删除不行,会导致id错乱损坏预制件;
把这个_name改成其他的值貌似可以,就是不知道有没有什么副作用
因为这个字段已经存在了,编辑器不会去清空这个数据。
可以通过写场景脚本来清理这个字段,打开场景后,遍历所有的预制体实例,然后去掉这个属性,再保存即可。场景脚本文档:调用引擎 API · Cocos Creator
你的改动副作用:1. 这个数据会占空间,没什么用处;2. 实例有_nameTest属性的化,会被覆盖掉。
嗯,反复测试发现直接把这一段清空变成{},是可行的,后续二次保存引擎似乎会删掉这个空的,不会再覆盖;
目前是写了插件,针对有问题的预制件批量执行清除;并且监听预制件保存,发现有问题的自动清除;
因为担心清除后有什么预想不到的问题,以及担心后续升级不兼容,目前还在小范围的实验;
这种清空方式应该不会影响后续升级吧,因为出了这个事儿,现在团队对升级3.6的态度也更谨慎了,之前就是3.5刚出没多久就直接升了
建议不要改成空括号,可以修改预制体上的propertyOverrides属性,这个属性记录了overrideInfo的索引,你去掉_name对应的索引(id的数值是json数组下标),这个CCPropertyOverrideInfo就失效了,在编辑器中保存一次,数据就会正常。