C# 如何计算在体素游戏中应首先加载哪些块?

C# 如何计算在体素游戏中应首先加载哪些块?,c#,unity3d,hashmap,minecraft,terrain,C#,Unity3d,Hashmap,Minecraft,Terrain,我正在Unity3D游戏引擎中开发一款体素游戏(即Minecraft、Cube World、InFiniminer等),使用C#作为编程语言 一块是16x16x16块大。我的代码在12毫秒内从文件中加载一个块,并在3毫秒内生成网格。我可以接受,就目前的比赛状态而言,这已经足够快了 我的问题是:如何以最有效的方式创建加载列表?球员一直在移动,他在运动。世界按照玩家移动的方向加载块。也可能会有高楼,所以会有一些砖块相互重叠。当建筑物“看得见”(达到一定距离)时,应将其完全加载。像在Minecraft

我正在Unity3D游戏引擎中开发一款体素游戏(即Minecraft、Cube World、InFiniminer等),使用C#作为编程语言

一块是16x16x16块大。我的代码在12毫秒内从文件中加载一个块,并在3毫秒内生成网格。我可以接受,就目前的比赛状态而言,这已经足够快了

我的问题是:如何以最有效的方式创建加载列表?球员一直在移动,他在运动。世界按照玩家移动的方向加载块。也可能会有高楼,所以会有一些砖块相互重叠。当建筑物“看得见”(达到一定距离)时,应将其完全加载。像在Minecraft中那样拥有16x256x16大小的块更好吗

这是一个相当复杂的话题,我需要被推向正确的方向,因为有无数种方法可以解决这个问题,但我正在尝试在不太复杂而无法实现非常快之间找到一个折衷方案。如果你的方法非常复杂,不要犹豫留下答案。我几乎不知道如何处理这个问题

我过去尝试过的:根据与玩家的距离对区块列表进行排序。因此,首先加载最近的块,最后加载最远的块。由于某种原因,这导致了世界加载的速度变慢,因为玩家下方和上方的区块也是首先加载的,但更重要的是加载与玩家处于同一高度的区块,因为他需要一些东西行走,而不是从世界上掉下来。玩家并不慢,他有中等到高的移动速度

我应该注意的是,我将块存储在C#字典中。关键是ChunkPosition(chunks中的x、y、z,因此第一个chunk是0,0,0,他的右邻居是1,0,0等等),值是chunk类,它保存所有chunk数据及其块等等

如果您需要更多信息,请在评论中询问


提前谢谢

本质上,您希望找到最靠近[玩家及其查看位置]的区块。我的意思是,如果你还没有加载前面的块,你不想在你的播放器后面加载块。所以,做一些类似(伪代码)的事情


因此,您计算块的优先级有多高,然后根据它们的优先级逐个加载它们。在我的示例中,离玩家的距离越远,优先级越低,区块离(查看的)屏幕中心越近,优先级越高。然后,检查优先级是否低于视距,如果低于视距,则不要费心加载,因为它太远。

您不能这样做。只需从众多现有的minecraft/voxel工具包中选择一个即可,可在资产商店轻松获取,也可通过谷歌免费获取。你需要3年以上的编程才能从头开始。这完全是毫无意义的。我主要是为了学习而开发的,所以这不是毫无意义的。我不想使用已经存在的工具包。当然那会更容易。
     int priority = -(distanceFromPlayer + closenessToCenterOfScreen);