一个关于Component属性的疑惑

  • Creator 版本:3.8.6

  • 重现方式:编辑预制体并保存关闭,重新打开后

  • 首个报错: 无报错

最近使用Cocos做点自己的小项目时,遇到一个疑惑的问题,不清楚是我用法有问题还是一个bug,情况如下:
我有一个继承自Component的自定义组件image
然后基于该组件派生出各种不同的功能的组件,如
image
image
其中HitFrameProperty是我的一个自定义数据类

现在问题来了,当我将上面的组件都挂接到一个节点之下时,首次挂接一切都是正常的,如下图:


但当我保存预制体,并且关闭编辑界面,再次打开预制体时,突然就会多出一个为空的属性,如下图红色矩形框内所示:

这个属性明明我没有在组件中定义过,我打开预制体的文件,搜索这个属性也没有发现存在预制体中,但是调试还是能观察到有这么一条空字段存在于实例之中,实在令我疑惑,希望有朋友遇到相同的情况能够解答,也希望官方能够帮忙解惑,谢谢了~

自己顶一下

或许因为你在代码new了HitFrameProperty,而编辑器找不到该类型,所以默认是null了

感谢回答,但是这里确实没有,因为我的这些组件都只有数据,没有方法,纯配置来着image
可以看到全局搜索这个类的引用,只有真正用了它的组件new了一个

有官方的同学能看看吗,自己再顶一下

这个HitFrameProperty 类有注册cclass么?

编辑器老bug了,一个携带@property的基类Base,如果出现两个或以上的子类同时挂在一个节点上,那么后面添加的子类会继承前一个子类的属性,也就是你这里Motion会出现Hit的属性。
然后你只能看,不能改,预制体文件上是没有这属性的,但是运行起来会发现实例化出来的Motion会拥有该属性,不过是undefined。可以说不影响,但是看着难受。
解决方式:只能让官方的看了。避免出现该方式就是:
1、基类不要携带@property,或者将通用属性都写到子类(子类太多就算了);
2、采用同名的对象属性,即将子类的所有@property属性都囊括成一个对象属性,那么编辑器显示会正常(即同名属性会覆盖);

有的,要不然没办法在其他类里面当一个自定义属性用

好吧,原来是老bug,目前确实没有发现啥影响,只是担心有没有潜在的问题,如果是这样的话就先不管了,只能坐等官方修复,多谢回答