【发布时间】:2021-01-20 17:47:38
【问题描述】:
我在程序上生成一个世界,对于 Tilemap 中的每个位置,我调用此函数以获得与高度匹配的图块类型:
public static NaturalTile GetNaturalTileByHeight(float height)
{
SortedDictionary<float, NaturalTile> tilesByHeight = new SortedDictionary<float, NaturalTile>();
foreach (var tile in NaturalTileTypes)
{
if (tile.MaxGenHeight > 0) tilesByHeight.Add(tile.MaxGenHeight, tile);
}
foreach (var tile in tilesByHeight)
{
if (height <= tile.Key) return tile.Value;
}
return null;
}
对于每个图块,我必须首先创建一个排序字典,以便按高度排序。然后,我必须用基于高度的图块填充排序字典。最后,我将高度与排序字典中的每个图块进行比较,因为它是按高度排序的,所以它总是会首先返回值较低的图块,从而使其正常工作。
我觉得这太复杂了,即使它只在世界生成时发生过一次。
非常感谢任何改进建议。
【问题讨论】:
-
在这里使用字典并不是很有用,因为您没有离散值,因此您无法从字典查找的效率中受益。相反,您在 O(n) 时间内使用它(遍历所有项目,直到找到所需的项目)。您也许可以定义某种树形结构,以便更快地查找(如果实施正确)。
标签: c# unity3d optimization procedural-generation