能够提供类似onLoad的生命周期函数

creator是否能够提供1个类似onLoad的生命周期函数,在未激活的状态下也有效。现有的onLoad函数需要激活才会被调起,有时候用起来很是不便。

抱歉,我没说清楚,不是脚本未激活,是脚本所在的节点未激活:joy:

处理方案1:在编辑器中都是激活状态,然后在onLoad()中初始化后,调用node.active=false

处理方案2:不在A和B脚本onLoad()中初始化,挂载一个新脚本C,在新脚本中顺序初始化A和B。

目前用的就是方案2了,有点局限性,需要C脚本先知道A,B在哪里;方案1那个其实也可以用,就是做在编辑器里面比较丑,所有的节点都要显示出来。。。

v2.0.2 及 以上版本
未激活组件   组件的onLoad也是会被调用的

随便建一个脚本NewScript11.ts

将组件添加到节点,并取消勾选

运行到浏览器,查看控制台

1赞

抱歉,我没说清楚,不是脚本未激活,是脚本所在的节点未激活:joy:

为什么要有这样的机制?

比如想通过一个类来管理节点(控制UI显示/关闭之类的),想让被控制的节点能够自己注册到管理类中,但是目前只有激活的节点才能通过onload注册(所有的节点都打开又不便于编辑)

这个需求其实用 getComponentsInChildren 来实现是最高效的,还要增加一个生命周期回调的话,感觉有点浪费了。
如果是我自己做项目,我会直接用 hierarchy 去实现,也就是说使用如下的场景结构:

 - UIManager
    - Panel1
    - Panel2
    - Panel3
    - ...

然后通过 uiMgr.children 获取所有需要管理的节点

1赞

特别是自己做关卡编辑器,和策划配合使用的时候,未激活状态加一个生命周期函数还是很有用的。现在就很麻烦

节点隐藏,节点上的脚本所有的生命周期都不调用,节点显示然后把节点上的脚本勾掉(脚本enable=false)的情况下脚本的onLoad仍然走,这设计总感觉很奇怪。如果一个节点默认是隐藏的,然后它自己监听事件来决定自己的显隐就不行,必须在别的节点监听事件来操作自己的显隐。

单纯隐藏请用 opacity 或者 enabled 而不是 active

其实现在这样也有好处,省的指不定在哪个节点上挂个脚本,自己管理自己,找都找不到