引擎版本3.8.3
节点树
-NodeA
-NodeB
各自挂载组件CompA、CompB
正常start执行顺序是 CompA.start() -> CompB.start(),这没问题。
然而一旦CompA组件中重写了onEnable方法,start执行顺序就变成了 CompB.start() -> CompA.start()
很离谱只能说…
节点上的组件执行顺序和上下顺序有关,不同节点可能就没这个逻辑关系了但是能确定的是所有start实在onenble执行后再执行的
发个demo瞧瞧,是不是哪里弄错了
如果你对顺序有强依赖,可以自己声明 executionOrder,否则引擎将按最高效的方式去实现。
当然更建议的做法是面向数据一些,需要依赖顺序的逻辑自己管控。否则哪天场景节点被改了个顺序,游戏逻辑就错了??
2赞
start 只在入口脚本用一次,其他情况根本不用,都是主控逻辑脚本控制初始化顺序
大家不会看文档看那么细,基本上就是代码跑几遍发现没问题就认为确实是这种(自己猜想的)规则,绝大部分时候没问题,一旦出问题死也找不到,好不容易找到问题所在就会发现,哦,原来我的逻辑是有问题的么,可我代码就是靠它跑起来的。最后边变成此程序依赖bug运行,请勿随意改动
1赞
那是我先入为主认为节点间生命周期是有固定执行顺序的,怪不得我在文档找不到一句相关描述。游戏play相关倒是还好,基本可以脱离引擎,但游戏UI就不行了,很多地方父子节点都有顺序依赖的。
executionOrder我用的不多,因为我感觉这个一旦使用就容易滥用,一旦滥用管理起来一定头疼。
“否则哪天场景节点被改了个顺序,游戏逻辑就错了??”这句话其实不太妥,因为cocos生命周期函数默认就是从节点树由顶至底执行的,大部分人刚入门测试过一遍都会这么认为,文档也没有特别强调其实这个顺序是不对的,有多少项目是完全不依赖这个顺序的?如果改一下默认顺序,能跑起来的项目又有多少。
如果默认由节点树顶至底的这个顺序只是“恰好”是这样的,那文档着重标注一下应该比较好。
1赞