c# - 如何使 FastNoise Lite 正常工作?
问题描述
我正在制作一个将使用地形生成的游戏,所以我使用的是FastNoise Lite库的 C# 版本。但是,它似乎没有像我想要的那样工作。
我有以下生成 TileMap 的代码:
public void Generate(int mapSeed, Vector2 mapSize)
{
noise = new FastNoiseLite(mapSeed);
noise.SetNoiseType(FastNoiseLite.NoiseType.Perlin);
noise.SetFrequency(0.01f);
noise.SetFractalLacunarity(2f);
noise.SetFractalGain(0.5f);
arrMap = new Tile[(int)mapSize.Y, (int)mapSize.X];
for (int y = 0; y < mapSize.Y; y++)
for (int x = 0; x < mapSize.X; x++)
{
if (noise.GetNoise(x, y) <= 0.04)
arrMap[y, x] = new Water(new Vector2(x, y), gridSize, textures[0]);
else if (noise.GetNoise(x, y) <= 0.08)
arrMap[y, x] = new Sand(new Vector2(x, y), gridSize, textures[1]);
else
arrMap[y, x] = new Grass(new Vector2(x, y), gridSize, textures[2]);
}
}
所有这一切都是用一些不同的瓷砖(如水或草)创建一个二维数组。
然后当我创建它并绘制它时,我得到以下结果:
但是,我想要类似的东西:
问题是:当我改变空隙或增益时,什么也没有发生。频率只是改变有多少“补丁”草。我想这是库的问题和/或我不知道如何正确使用它的事实,因为我以前在 python 中做过这个,但从来没有遇到过这个错误。
我该如何解决?
解决方案
我需要做的就是添加一个分形类型:
noise = new FastNoiseLite(mapSeed);
noise.SetNoiseType(FastNoiseLite.NoiseType.Perlin);
noise.SetFrequency(0.01f);
noise.SetFractalLacunarity(2f);
noise.SetFractalGain(0.5f);
// this setting
noise.SetFractalType(FastNoiseLite.FractalType.FBm);
FBm 似乎是最适合我想要的地形生成的方法
推荐阅读
- c# - Azure App Service 似乎在 .NET 5 模式下启用了 NLS
- ssh - 为 root 用户禁用远程 SSH 登录会锁定我的 Plesk 服务器吗?
- python - 从 eml 文件中提取图像
- javascript - 无法从 react-map-gl 和 Mapbox 显示 MAP
- spark-java - 线程本地好吗?
- r - R中的子集data.frame并计算汇总统计,与零行子集重新组合
- javascript - 从 app.js (Node) 获取数据到 js 文件
- python - 当我使用 xpath 从网站提取信息时没有收集数据
- ios - 调用“UNUserNotificationCenter”的完成处理程序时崩溃
- javascript - v8 上用 Libuv 或 Libevent 实现事件循环,为什么需要?