private IEnumerator RefreshEntity() { while (true) { if (world.FirstGeneted) { if (entityRefreshQueue.Count > 0) { WorldPos refreshPos = entityRefreshQueue.Dequeue(); //真正要刷的时候再次判断是否在玩家视野 if (IsInPlayerView(refreshPos)) { Chunk chunk = world.GetChunk(refreshPos.x, refreshPos.y, refreshPos.z); if (chunk != null && chunk.isGenerated) { if (chunk.RefreshEntity() > 0) { yield return(new WaitForSeconds(0.1f)); } } } } if (entityRemoveQueue.Count > 0) { WorldPos removePos = entityRemoveQueue.Dequeue(); if (!IsInPlayerView(removePos)) { Chunk chunk = world.GetChunk(removePos.x, removePos.y, removePos.z); if (chunk != null) { if (chunk.RemoveEntity() > 0) { yield return(new WaitForSeconds(0.1f)); } } } } } yield return(null); } }
public void RemoveChunk(Chunk chunk) { chunk.RemoveEntity(); _world.chunks.Remove(chunk.worldPos); _manager.EnqueueSaveChunk(chunk); }