下面这个代码,期望的表现是:
在编辑器中,当设置好预制体后,会创建子节点,
每次保存代码返回编辑器,子节点数量不会因此变多。
在2.4.2版本里确实是这样的,每次返回虽然重新创建了子节点,但旧的子节点已经自动被清除了(或者说没有保存下来)。
但是在2.4.8版本每次保存代码返回编辑器,就会多一个子节点。
重新打开场景,两个版本的表现都是对的,都只有一个子节点。
const { ccclass, property, executeInEditMode } = cc._decorator;
@ccclass
@executeInEditMode
export default class Test extends cc.Component {
@property
private _prefab: cc.Prefab = null;
@property(cc.Prefab)
public set prefab(v: cc.Prefab) {
this._prefab = v;
this._onPrefabChanged();
}
public get prefab(): cc.Prefab {
return this._prefab;
}
onLoad() {
this._onPrefabChanged();
}
_onPrefabChanged() {
let prefab = this._prefab;
if (!prefab) {
return;
}
let node = cc.instantiate(prefab);
// cc.Object["Flags"].DontSave // 当前节点不会被保存到prefab文件里
// cc.Object["Flags"].LockedInEditor // 当前节点及子节点在编辑器里不会被点击到
// cc.Object["Flags"].HideInHierarchy // 当前节点及子节点在编辑器里不显示
node["_objFlags"] |= (
cc.Object["Flags"].DontSave
| cc.Object["Flags"].LockedInEditor
| cc.Object["Flags"].HideInHierarchy
);
node.parent = this.node;
cc.log(this.node.childrenCount);
}
}