您好,我在调试DS的UObject List的时候发现一个问题。当我们采用ReplicationGraph框架并使用Grid2D的CellNode方案时
那就是随着时间和玩家游玩数的增多,UReplicationGraphNode_ConnectionDormancyNode的实例数目在逐步增多。
[Image Removed]
我刚开始认为,Global上来说,一个GridCellNode对应一个子Node——UReplicationGraphNode_DormancyNode,一个DormancyNode又维护了一个List,对应Connection数目的子Node列表——UReplicationGraphNode_ConnectionDormancyNode。放在ChildNode里,维持Reference关系
[Image Removed]
同时可以存放在这里,便于通过Connection快速查询[Image Removed]
鉴于我研究了它的整个生成和管理,所以这里我感觉是有点奇怪的,当一个Connection断开(也就是UReplicationGraph::RemoveClientConnection),生命周期结束之后,它只会影响ConnectionNodes,而不会影响GlobalGraphNode
[Image Removed]
但严格意义上来说,CellNode是GlobalNodes,它管辖的DormancyNode是GlobalNodes,但实际上再下一层的ConnectionDormancyNodes严格意义上并不是Global的。
但是我们在连接断开时,并没有处理GlobalNode当中的任何逻辑,因此会导致ConnectionDormancyNodes不触发TearDown。
请问Lyra的RepGraph框架案例里是否的确存在这样的问题?
修改的话,是不是应该重载UReplicationGraph::RemoveClientConnection。遍历GridNodes,找到孙Node当中Key为这个Connection的,手动将他们都TearDown掉,才会避免这样的问题?