组件属性增减后属性值被重置的问题

我不知道现在是不是临时调的一个版本
现在组件属性表变更后所有属性都被重置了
就不能判定一下么,属性表里存一下类型名称,当新属性类型与保存的类型不一致的时候再重置不行?
现在这样通用组件升级不是要了命了么。。。我改一个属性所有相关组件都需要重新设置属性值?

  • Creator 版本: 3.4

  • 目标平台:

  • 重现方式:必现

  • 首个报错:

  • 之前哪个版本是正常的: 3.3.2

  • 手机型号:

  • 手机浏览器:

  • 编辑器操作系统:

  • 重现概率:

感谢反馈,我们确认下

找到原因了,在prefab编辑状态下,通过外部工具修改了组件源码保存切回后,属性面板的值都会重置,但是你可以通过close并不保存prefab的方式关闭编辑模式,重新打开prefab即可
这个问题需要担心的是编辑了一半的prefab没保存,然后去编辑源码了,回来需要纠结是保属性值还是保界面编辑的内容

我这好像没复现出来啊,能否录个屏,或者给个demo?
我这边在Prefab编辑模式下新加个属性,前面的属性值没有发生改变,不知道我理解的对不对?
image

我刚又开了一个新项目,确实没有重现
但是我正在使用的项目里就有这个问题
我一会看看能不能把资源复制到新项目里复现这个问题

可能是资源问题吧,这个prefab资源是我在3.3.2版里遭遇prefab损坏的问题,通过拖prefab到一个临时场景里,然后一个个组件检查,去掉异常节点后保存下来的,现在打开这个prefab的时候会有一堆的反序列化异常
2021-12-23 12:12:33 [Scene] Value dump failed.

at ValueTypeDump.encode (Y:\CocosDashboard_1.0.17\resources.editors\Creator\3.4.0\resources\app.asar\builtin\scene\dist\utils\dump\types\value-type-dump.ccc:1:242)

at _encodeByType (Y:\CocosDashboard_1.0.17\resources.editors\Creator\3.4.0\resources\app.asar\builtin\scene\dist\utils\dump\encode.ccc:1:5022)

at encodeObject (Y:\CocosDashboard_1.0.17\resources.editors\Creator\3.4.0\resources\app.asar\builtin\scene\dist\utils\dump\encode.ccc:1:6593)

at Y:\CocosDashboard_1.0.17\resources.editors\Creator\3.4.0\resources\app.asar\builtin\scene\dist\utils\dump\encode.ccc:1:3694

at Array.map ()

at encodeComponent (Y:\CocosDashboard_1.0.17\resources.editors\Creator\3.4.0\resources\app.asar\builtin\scene\dist\utils\dump\encode.ccc:1:3622)

at Y:\CocosDashboard_1.0.17\resources.editors\Creator\3.4.0\resources\app.asar\builtin\scene\dist\utils\dump\encode.ccc:1:1669

类似这样的

有没有办法保留 prefab 的布局,删除里边的属性值? 现在这个资源连重置根节点component的属性都做不到。。。

查问题过程中,我又把一个prefab整坏了。。。啊,真服了
一个component
@property(Color)
c:Color = null;

这样定义会在载入时报刚刚我说的序列化异常
然后我试着改成这样
@property(Color)
c:Color = Color.TRANSPARENT;

然后prefab载入不进来,一直转圈

然后我又试着改成
@property(Color)
c:Color = new Color(0, 0, 0, 0);

然后载入prefab 后所有节点红字,控制台提示
2021-12-23 12:42:14 [Scene] Cannot read property ‘_prefab’ of undefined

6

2021-12-23 12:42:15 [Window] parameter error

然后我试着删除这个属性然后重新打开 prefab
然后。。。这个prefab就是所有节点红字状态,已经无法使用了

可以把有问题的Prefab发我看一下是什么问题

prefabs.zip (29.6 KB)

那个红字节点的问题,可能是编辑器环境异常了,关掉编辑器重新打开后应该能恢复

组件类源码修改导致的异常,我应该通过什么步骤来复现呢?

讲真。。我也不知道,prefab太复杂了,我的工程又不方便发源码,我自己先找找原因
我现在有个问题希望你先帮我解答一下 property 类型为 Color 的,我应该怎么定义?

image
image
我这么写看起来是正常的。

NewProject.zip (1.9 MB)
重现出来了,你可以打开工程,编辑 test.prefab
这个状态下,你双击NewComponentB.ts进行修改,比如 把
@property(Node)
nodeT1: Node = null
改为
nodeT2: Node = null

然后保存,返回编辑器
你就会发现test根节点的NewComponentA组件中, b1的引用消失了

收到,我看一下~

又发现一个新的问题。。。。 在编辑prefab的时候,不小心把一个 粗体节点拖到了另一个粗体节点内部。。。然后拖不出来了,他被判定为是另一个prefab的子节点,无法拖出

收到,我会一起修掉

还有一个bug,在编辑prefab(A)的时候,拖进来另一个prefab(B)的引用,并修改其(B)子元件属性后保存关闭该prefab(A)并不会保存A中B的子元件修改后的属性值,只能再次打开该prefab(A)并重新修改并再次保存才能生效

我按你的描述操作了一下,没有复现,你看看录屏是不是和你描述的一致哈~你修改的是什么属性呢?
prefab