没写onEnable()会影响start()获得某些数据,引擎组能说下原因吗?

写onEnable()时
image
运行结果:
image
没写onEnable()时
image
运行结果:
image

start()在写onEnable()时能获得引擎自动添加的子节点,不写onEnable()时不能获得引擎自动添加的子节点

1赞

引擎版本2.4.12

的确有点反直觉,Canvas不在onLoad添加,也会有这个问题吗

这个问题只有用代码添加才会有。在onLoad里添加Canvas组件,必须写出onEnable(注:内部可以没代码),才能start中获得引擎自动添加的子节点;在onEnable添加Canvas组件,能在start中获得引擎自动添加的子节点;在start里添加Canvas组件,不能获得引擎自动添加的子节点;其它生命周期添加Canvas组件,start以执行并且这周期只会执行一次。
由上面问题得到的推论:当在onLoad周期代码添加的组件会让引擎自动添加的子节点,要在start获得引擎自动添加的子节点,必须写出onEnable(注:内部可以没代码)。

那我猜应该是有onEnable的时候,多执行一个生命周期,给了一点加载Canvas的时间,可以尝试在onLoad加更加多的节点看看是否如此

和你抱怨一下引擎,后面还有个问题,能解答的解答下,多谢,否则看其他人是否能解决。
要不是工程界面有限制(对大数人没影响),比如有Canvas组件的节点,官方锁定节点的宽高我是理解,但不能理解官方把坐标基准点与相对父节点的坐标锁定,这不利我计算摄像头的移动(因为只有它的坐标系与其他元素的坐标系不一致)以及TiledMap的引擎自动添加的子节点及其后代节点数据不能修改(因为引擎会自动恢复,这里也涉及坐标系锁定问题,这个只是看着没锁定),我用着不顺手,要用脚本修改,一部分数据要用脚本修改,干脆只用代码好了(每个场景只有一个空节点挂载一个脚本,其他组件与节点全部用代码实现),然后就发现了不少问题(这个文件题也是这样发现),比如我还发了个枚举问题主题,问它有8个值,官方为什么只给3个枚举,其他值都要强转,官方没写一些枚举没问题,不知道官方为什么不在API提醒不只3个值,还有5个值的枚举没有写,其它人看到了也会自己强转。
当然脚本文件不能同名(包括不同路径)也是牛,导致我的文件名超长,还要把一层层文件夹名加到文件名前面(养成习惯,防止以后正式项目二次开发脚本文件同名,这样只要不是同一文件夹同名都没问题,同名也方便找到。)
像我这样基本靠脚本比用工程界面与脚本开发,性能有损失吗?

不是,我用for循环100000次输出索引来阻塞运行,也没用,必须写出onEnable才能得到

应该不会吧,如果这样的话,好多代码都会有问题。

改下错别字
手动添加没问题,直接就可以拿到,引擎自动添加才有这个问题,我也是输出绑定canvas组件的节点的子节点时无意发现引擎自动添加个绑定camera组件的节点的子节点,原来我是不知道绑定canvas组件时,引擎自动添加绑定camera组件的子节点,我发现自动添加子节点(注意哪怕你手动添加的节点在动添加节点前,自动添加节点的索引也是0),就是放弃手动,使用自动添加子节点,修改它的节点名及添加脚本,然后发现报错,后面发现有时获得不了这个节点,有时又能获得(当时以为碰到玄学事件了,没发现加了onEnable的原因,毕竟我学过vue,认为空生命周期不写也没影响),找了一个通宵才发现onEnable的原因,我也不敢相信,所以才问官方原因。因为不应该出现的现象出现了,毕竟实践出的现象,只能问官方了。如果不信你可以实践一下。

@jare 能看看什么原因吗?

deme传个,看看

a.rar (671.3 KB)

deme写错了吗?是demo吗?