【开发团队进】求给 Component 增加 onBeforeSave 生命周期回调

Component 增加 onBeforeSave 生命周期回调,在Prefab或者Scene保存前调用。
调用顺序按节点树自顶向下。

举手之劳就可以实现嵌套Prefab,并且还能在编辑器里预览了啊。

@ccclass 
@executeInEditMode
class LoadPrefab extends cc.Component {
    @property(cc.Prefab) prefab: cc.Prefab = null;

    private _generatedNode: cc.Node = null;
    onEnable() {
        // 在编辑模式显示效果
        if (!this.prefab) return;
        this._generatedNode = cc.instantiate(this.prefab);
        this.node.addChild(this._generatedNode);
    }
    onDisable() {
        if (this._generatedNode)
            this._generatedNode.destroy();
    }
    onBeforeSave() {
        // 保存前删掉,以免影响结果
        if (this._generatedNode)
            this._generatedNode.destroy();
    } 
}
  1. 那保存后,这个节点该如何添加回来?
  2. 引擎正准备在 2.3.3 加入 _onBeforeSerialize,不过关于具体是否应该开放给用户,还没想得特别清楚。

我也用类似的机制实现了一个,
不过我是放在PrivateNode里面,在编辑器中只能看,不能修改
没想的特别完善,能实现假嵌套方便排版以及动态载入时使用就很好了

每次编辑器加载(或者运行时)都通过代码自动创建,
从而在Editor提供和运行时一样的预览效果。

而保存前,再删掉,为了让这个节点不被保存进文件。

(不然不就每次打开这个场景都会多创建一个实例,越来越多)

然后你们保存完,得再重新打开场景?不然就看不到了

因为用了 executeInEditMode
再打开会执行 onEnable

保存之后自动先disable再enable的话就没事了……