今天使用GetComponentsInChildren, 老司机翻船。因为一直以来我使用这个函数,下意识的从来所有的相同component都是放在子节点下,本身节点肯定不会放一个相同的component,不然设计上肯定是有问题的。于是我自己一直也认为该函数所取得的component不包含节点所带的component(假设有一个相同的)。我今天使用一个musicmanager类,该类在本身节点及子节点都挂载了多个audiosouce类似对象池,而本身的audiosource刚好是一直循环播放的,于是按照判断逻辑检测playing被忽略,本身节点的虽然被GetComponentsInChildren拿到了,但刚好就一直没被使用,“正好”符合GetComponentsInChildren的我所以为的行为,我仍然认为只拿到了子节点的component。于是当我贪快在本身节点多加了另一个固定的audiosource(主要代码非我创建有点懒了),但不是循环的,坏事了,多加的这个audiosource一直被归属到GetComponentsInChildren所属的集合,于是各种偶发的奇怪行为令人百思不得其解。一直以为是unitiy又抽风了,终于怀疑到这里,一看不禁老脸一红。要检讨,对这个常用函数竟然一直带着错误的认识。但仔细想想,不管是从GetComponentsInChildren本身的名字意思,还是多个相同component的挂载使用来说,我似乎也没错。天不从人愿也,戒之戒之。