关于cc.node 的 onLoad 回调的疑问

/*
当附加到一个激活的节点上或者其节点第一次激活时候调用。onLoad 总是会在任何 start 方法调用前执行,这能用于安排脚本的初始化顺序。

该方法为生命周期方法,父类未必会有实现。并且你只能在该方法内部调用父类的实现,不可在其它地方直接调用该方法。
*/
protected onLoad(): void;

为什么 onLoad 要依赖节点是否激活的状态?
为什么不能像unity的onAwake方法一样,只要实例化后就调用?
现在的设计导致在写component时,节点被添加到场景这个时间点不好把控,只能从外部来得知节点被add到场景里。

比如我在写一个脚本:
class MyComponent{
public data:Data;
onLoad(){
data = new Data();
}
}

let mycomponent = mynode.addComponent(MyComponent);
mycomponent.data.func();//如果 mynode.active 为 false 的话,这里就报错了,说data尚未初始化。

解决这个 mynode.active 为 false 的情况,就只能添加外部的调用。
class MyComponent{
public data:Data;

//加入外部方法来解决
public Init(){
	data = new Data();
}

onLoad(){
	//data不能在这初始化了
}

}

let mycomponent = mynode.addComponent(MyComponent);
mycomponent.Init();
mycomponent.data.func();

像这样通过外部方法支持,才能实现mynode.active 为 false 的情况不报错。

这样虽然能解决问题,但是这个onLoad方法就显得相当的鸡肋。
它只能捕捉到节点激活的时候比onstart早的那个时间点。但是并不能捕捉到节点被创建的时间带点。
能不能添加一个类似unity onAwake的回调,或者把 onLoad 的回调时机修改为节点创建的时候?

1赞