【发布时间】:2013-12-24 15:19:31
【问题描述】:
所以在搜索之后,我只找到了 Java 和 C++,而且我很喜欢并且只知道 .net 足以完成我的项目。我们正在创建一个随机图块生成地图(想想 terraria/flat minecraft 有点像),在 Unity 中创建了几乎所有的材料和一堆其他代码之后,我意识到我无法完全弄清楚这一点(接下来知道对perlin一无所知并且无法弄清楚,因此将不胜感激。)
我开始使用 .net (MS VS) 将屏幕空间分割成我称之为 32x32 的包裹并创建一个循环来填充它。但是我们正在使用 Unity,因为它已经是一个游戏引擎,并且不知道如何实现这一点。
首先是地图必须由不同的精灵组成,我已经创建了必须进入什么高度的类和编码列表,但我不知道如何从无到有生成所有随机地形,因为世界需要在玩家看到任何东西之前随机创建。
我尝试了一个网格,但它使用了太多的内存循环方式;我还尝试了一个平面并用纹理填充它,但无法正确随机化,然后它当然是一个带有图像而不是可以交互的块的平面对象。
我的直接问题:我们如何从 C# 中 2D 空间中的随机图块生成一个由数千个难以处理的图块组成的世界(我们已经考虑了 X 和 Y 的限制)?(严格的 C# 或可以导入 Unity 的东西,类似于我已经提到的游戏。)
提前感谢您的任何建议,希望我提供了足够的信息。我知道这完全是关于程序生成和可能的 perlin 噪声算法,但我们都不知道这些,也不知道从哪里开始。
编辑:我被要求提供更多信息,到目前为止,我一直在使用 for 循环来创建单个和大块的随机图块。使用 IList 来存储已经消失的内容,因为它不会产生任何重叠。 (我不知道有一个更好的方法来做到这一点。)
这两种方法都很好用,直到我通过了大约 150 个块,然后它只是锁定并且必须崩溃。我试过没有列表系统认为数据是原因,它不是。我已经尝试在 Unity 中使用 Tidy Tile Mapper,但是一旦你通过了大约 200 个图块,就会出现同样的问题。我找不到正确的方法来创建玩家可以与之交互而不会阻塞内存的对象。
【问题讨论】: