使用代码修改属性后,如何在编辑器保存修改的数据

如下图所示,我在编辑器下使用代码创建了很多的box 并修改了box预制体的属性值 type ,但是当我保存预制体level_57的时候,所有的box就全部会恢复成预制体默认的值,当手动在Inspector面板修改属性赋值时保存Level_57预制体则保存成功,请问如果在使用代码赋值了type 属性后,保存预制体时使用的是保存后的type数据。。。
没有保存前


保存后

选中节点,在 属性界面 的 节点名称 上面 有个 移除预制件关联。
把关联取消了就可以了,记得先取消,在复制粘贴节点。
否则所有的复制出来的都是关联的,关联的就会有你说的这个情况。

另外,像你这种情况,建议使用代码复制节点。
可以减少预制体的文件大小,也更符合编程习惯。

我是要在代码生成的时候保存使用代码修改过的属性,移除预制体关联这个是能保存修改的属性,我现在也是这样干的,问题是,当我修改这个预制体后,之前保存的就没发统一修改了,因为已经解除预制体关联了。现在是啥情况呢, 就是你生成的,然后你在属性面板手动修改的值你保存level就能保存,代码改的就不能保存。

我这个是为了生成json配置,下面的box 都是在编辑器下使用代码去创建出来的,然后在创建的时候修改属性,但是无法保存 :rofl:

如果有统一属性需求,可以读外部数据。
既然是预制体的属性,那这个属性应该是独有的。

/**

* 设置编辑器下预制体组件的属性值,仅在编辑器下有效(通过此方法修改才能触发预制体的机制从而成功序列化对应的属性值)

* @param component 组件

* @param targetNode 目标节点

* @param key 组件属性key

* @param value 组件属性值    

*/

public static setPrefabCompProperty<T extends Component, K extends keyof T>(component: T, targetNode: Node, key: K, value: T[K]): void {

    if (!EDITOR) { return; }

    const index = targetNode.components.findIndex(com => com === component);

    const path = `__comps__.${index}.${String(key)}`;

    // @ts-ignore

    Editor.Message.request("scene", "set-property", {

        uuid: targetNode.uuid,

        path: path,

        dump: {

            value,

        },

    });

}

直接用这个应该是可以解决你的问题