// 分配一个 GameObject 到某个 Chunk public void AllotChunkChild(IChunkObject child) { Vector2 childPos = child.GetPosition(); Vector2Int worldPos = FloorToVector2Int(childPos.x, childPos.y); Vector2Int chunkPos = ToChunkPos(worldPos); Chunk newParentChunk = GetChunk(chunkPos); newParentChunk.AddChild(child); }
// 检测Child GameObjects是否逃逸, 从列表删除逃逸的对象, 并返回逃逸的GameObject列表 (ChunkManager : 如果不在自己的范围, 就把它交给其他Chunk管理) public List <IChunkObject> CheckRunningChildren() { List <IChunkObject> outerChildren = new List <IChunkObject>(); for (int i = childObjects.Count - 1; i >= 0; i--) { IChunkObject child = childObjects[i]; //如果不包含这个GameObject, 就加入返回列表 if (!CheckContain(child.GetPosition())) { // 如果这个Chunk正在更新, 那么child物体退出更新 if (enableUpdate) { child.ExitUpdate(); } childObjects.Remove(child); outerChildren.Add(child); } } return(outerChildren); }