不是的,组件1有组件1的map,组件2有组件2的map,只要各自组件脚本继承UIComp,自会有各自的组件通过自身的map维护,而不是组件1添加组件2,便把组件2的节点添加到组件1的map维护,并不是这样的。而是组件1添加组件2,组件1preload的时候有组件1的map在脚本1中,添加组件2时,组件2preload时有组件2的map在2脚本2中
节点树可能会动,我们是想着在改变节点树的时候尽量的保证代码能正常的运行
嗯嗯,自己用得顺手最重要。
其实我发这个帖主要是吐槽一下,明明是node的方法,为什么要通过cc.find来调用
value值保存为节点有两个问题
第一个是:这很容易导致内存增大,get一个key值的时候再封装一个方法去获取,对于外部代码来说都是一样的效果。
第二个是:如果节点已经销毁,但是因为你的是节点的问题,通过或许xx.xx.xx之类的很容易报错。
如果保存引用,每次getXXX(),性能也会影响。而原来的方法只有一次遍历节点的消耗,加上一个索引表的内存增加。
我觉得你说的地方挺对,但是我们先不考虑上面说的,代码里一直去遍历获取节点是否代码本身就有问题呢,增加快速获取的好处一个是不需要挂载节点到组件、不需要再显式的去getxxx抛去繁琐的事情罢了,而且还有一个重要的问题是,如果节点数据都保存了,你能保证你保存的节点一定都能全部用上么,如果用不上不就是白消耗内存了。
上述代码中,如果确定节点不会被使用的话,可以以下划线开头命名节点,这样会被忽略加入节点表。一般弄好的预制,不会删除某个节点的吧,我这用了挺久一段时间了,除非new出来的节点,才遇到删除的情况,new出来的节点我一般都弄成新的预制,新的预制有新的组件,有新的节点表,这样新增或者删除,都由新的组件去管理了,与原来无关。
嗯我觉得是潜在的问题
如果节点被删除了,出现this.ui[xx]报错,那我觉得,就算是通过@property这样挂节点,你把这个节点删了,再调用,照样是报错的 
上面聊的好激烈
歪个楼,回到原来的问题cc.find为啥不写到节点上,3.X版本node新增了个函数“getChildByPath”,cc.find核心代码放到它了,也就是说官方其实已经按你说的改到node上了,具体哪个版本加的就不清楚了
getChild(node: cc.Node, …paths: string[]): cc.Node {
let len = paths.length;
if (len === 1) return node.getChildByName(paths[0]);
for (let i = 0; i < len; ++i) {
node = node.getChildByName(paths[i]);
if (!node) return null;
}
return node;
}
把cc.find和getChildByName结合了一下
取一级子节点:this.getChild(this.node,‘xxx’); //效率等同于getChildByName
取多级子节点:this.getChild(this.node,‘xxx’,‘yyy’,‘zzz’); //效率高于cc.find
哦哦,那官方应该把2.x也更新一下,难受~~ 
cc.find和getChild方法都用的比较少,一个是因为更新版本时很容易会调整节点树结构,一旦调整了结构,就得看看代码有没有通过find的,如果有find,就要调整,并且一些路径该起来挺恶心的。二是通过find(xx/xx/xx)写路径,感觉路径长了的话,写@property也反而更快(无论是开发效率还是性能)。
其实更方便 更整洁的代码,比这点内存消耗重要(也就打开界面的时候增加,关闭界面的时候销毁了),要不也不会很多项目不采用挂载节点到组件这种方式了,照理说这种方式在使用节点的时候不用遍历节点树,性能应该是最优的。
嗯嗯,这点我同意,通过字符串这种不稳定的属性来定位获取节点,很容易随着预制的变动而出现异常
是的啊没毛病,只保存key就不会啊
说到这里就是看项目了,我之前写剧情关卡的就大量操作节点,我上面说的都是我踩出来的。
你们上面说的我不知道你们有没有考虑把自己写的给别人用。
第一个是:打开界面和销毁界面不是所有人的界面都是这样,他可能一下打开A,B,C,D界面,而且每个界面随时根据玩家的操作返回其中之一,我相信更多的选择是收进缓存打开还是原来的样子,如果是更复杂的情况你保存了多少节点呢,保证key的好处就是按需即用,而且内部无需关心外部是怎样的。
第二个是:我不太明白你说的 其实更方便 更整洁的代码 跟 内存消耗的对比关系。
我的提倡是 只保存动态的key,内存还是用cocos的方法获取,如果是这样的话this.ui[xxx]返回就是null。当然对于外部来说null.xxx还是会报错,但是这个是外部的问题了,或许ui的组件内部也抛出个错误比较好,不过都是些细枝末节的东西了
1、没看懂你说的保存KEY是什么意思
2、我的意思是一些简便的操作或许会牺牲一点性能,但很多情况为了代码更好读,更好修改,这点性能牺牲是值得的。
性能应该差不了多少吧,引擎底层一样要去取节点的