creator是否能够提供1个类似onLoad的生命周期函数,在未激活的状态下也有效。现有的onLoad函数需要激活才会被调起,有时候用起来很是不便。
抱歉,我没说清楚,不是脚本未激活,是脚本所在的节点未激活
creator是否能够提供1个类似onLoad的生命周期函数,在未激活的状态下也有效。现有的onLoad函数需要激活才会被调起,有时候用起来很是不便。
抱歉,我没说清楚,不是脚本未激活,是脚本所在的节点未激活
处理方案1:在编辑器中都是激活状态,然后在onLoad()中初始化后,调用node.active=false
处理方案2:不在A和B脚本onLoad()中初始化,挂载一个新脚本C,在新脚本中顺序初始化A和B。
目前用的就是方案2了,有点局限性,需要C脚本先知道A,B在哪里;方案1那个其实也可以用,就是做在编辑器里面比较丑,所有的节点都要显示出来。。。
v2.0.2 及 以上版本
未激活组件 组件的onLoad也是会被调用的
随便建一个脚本NewScript11.ts
将组件添加到节点,并取消勾选
运行到浏览器,查看控制台
抱歉,我没说清楚,不是脚本未激活,是脚本所在的节点未激活
为什么要有这样的机制?
比如想通过一个类来管理节点(控制UI显示/关闭之类的),想让被控制的节点能够自己注册到管理类中,但是目前只有激活的节点才能通过onload注册(所有的节点都打开又不便于编辑)
这个需求其实用 getComponentsInChildren 来实现是最高效的,还要增加一个生命周期回调的话,感觉有点浪费了。
如果是我自己做项目,我会直接用 hierarchy 去实现,也就是说使用如下的场景结构:
- UIManager
- Panel1
- Panel2
- Panel3
- ...
然后通过 uiMgr.children 获取所有需要管理的节点
特别是自己做关卡编辑器,和策划配合使用的时候,未激活状态加一个生命周期函数还是很有用的。现在就很麻烦
节点隐藏,节点上的脚本所有的生命周期都不调用,节点显示然后把节点上的脚本勾掉(脚本enable=false)的情况下脚本的onLoad仍然走,这设计总感觉很奇怪。如果一个节点默认是隐藏的,然后它自己监听事件来决定自己的显隐就不行,必须在别的节点监听事件来操作自己的显隐。
单纯隐藏请用 opacity 或者 enabled 而不是 active
其实现在这样也有好处,省的指不定在哪个节点上挂个脚本,自己管理自己,找都找不到