[Editor陈年老bug]😭两个Component属性错乱

简述
一个Node放2个相同的Component,不同的property,保存再打开值都变成同一个了

该bug由来已久,折磨了我很多年。
一直没空反馈来着……

复现方法:

一个prefab
一个Scene里直接引用该prefab(绿节点)

打开prefab,在prefab的某一个node上放>=2个同名组件,但是属性不同
(物理Joint或者某些自定义的Component会经常有这种需求)
保存,关闭

然后重新打开这个Scene
发现两个Component属性错乱了,两个Component都显示的相同的属性。

这时候只是显示错误,prefab里面还没事

在Scene里面随便修改prefab的其他部分
系统提示你保存
然后保存

现在好了,prefab里面也错乱了。

出现版本

目前已知的所有的Cocos Creator版本都有这个bug

这应该是同步预制体会有这样的情况
挂2个相同组件的需求…我几乎没有

在prefab里修改同步出去会有问题
在场景里修改同步到prefab里是可以的

别设置自动同步了呗(别让节点变绿),应该就好控制一些

你再次打开这个Scene,十有八九就会混乱。
如果已经混乱了你没发现,你再去修改其他node,然后同步回prefab
你没有修改的那部分值,就会用因为混乱,而覆盖原来正确的属性。

至于需求
一种就是物理组建,一个物体同时和多个其他物体钉在一起,就会有好多个RevoluteJoint,保存再打开很容易乱掉。另外就是一些我程序自己内部的框架,会用到同一个Component。

改成蓝的节点我不确定就能避免。

不过bug就是bug,workaround归workaround,一码说一码。
由大量workaround架构起来的工程终究缺乏可维护性,况且团队里非程序员要使用CC还要理解如何精密地规避这些bug是有一定困难的。

能不能给一下 demo,我们测试看看呢?感谢

cocos-bugs.zip (231.2 KB)

打开项目中的ExamplePrefab,可以看到


这两个ExampleComponent的值不同

打开这个【图1】里高亮的scene

选中ExamplePrefab

然后点“回退”

就变成这样了。

这时候如果修改其他属性,并保存回prefab,就真的两个值都是“bbb”了

好的,我们这边排查看看具体是什么原因导致的

刚刚问了一下,这算已知问题,目前暂时不支持相同组件进行回退,后续会进行完善,感谢反馈

https://forum.cocos.org/uploads/default/original/3X/2/4/243c35662152ab98b6370704e058f8e4d81b619d.png
那个……额………………怎么说呢

咱这好像不能叫“暂不支持”,

“暂不支持”是,对于存在一个节点上有两个同类组建的Prefab,点了回退,或者自动更新节点自动触发回退时,弹出错误信息说不支持这种操作,才叫“暂不支持”……

https://forum.cocos.org/uploads/default/original/3X/2/4/243c35662152ab98b6370704e058f8e4d81b619d.png
而实际的行为是支持,但给出了错误的结果。所以这玩意好像还是属于bug……

这个是由于当时某些原因导致没有处理相同组件的情况才导致的 bug,算是已知的 bug,这块后续会进行完善,所以才说暂不支持(就是不推荐用户挂在相同的组件)

常见的需求就是
物理的Joint系列,同一个RigidBody跟2个其他RigidBody连接
再就是我自己的项目写了一套MVVM框架,难免要一个节点出现多个用于绑定数据的Component。

确实,不过目前确实没办法支持,只能麻烦你多注意一下了,实在抱歉 :sweat_smile: