当前位置: 首页 > news >正文

Unity基于种子与地块概率的开放世界2D地图生成

public class BuildingGen : MonoBehaviour
{public int[] Building;//存储要生成的地块代码public int[] Probability;//存储概率public double seed;public int width = 100;public int height = 100;public float noiseScale = 0.1f;  //噪声缩放倍数private int[,] frequencyMap;//存储柏林噪声生成的二维数组void Start(){frequencyMap = new int[width, height];GeneratePerlinNoise();//在这里根据需要补一个根据frequencyMap生成地块的代码}private void GeneratePerlinNoise(){for (int x = 0; x < width; x++){for (int y = 0; y < height; y++){float xCoord = (float)x / width * noiseScale;float yCoord = (float)y / height * noiseScale;float perlinValue = Mathf.PerlinNoise((float)xCoord + (float)seed, (float)yCoord + (float)seed);int buildingType = MapPerlinValueToBuildingType(perlinValue);frequencyMap[x, y] = buildingType;}}}private int MapPerlinValueToBuildingType(float perlinValue){float cumulativeProbability = 0;for (int i = 0; i < Probability.Length; i++){cumulativeProbability += (float)Probability[i] / 100.0f;if (perlinValue <= cumulativeProbability){return Building[i];}}return Building[Building.Length - 1];}
}

实机效果:通过修改seed以生成不同的地形

修改地块权重让绿色地块更多:

http://www.lryc.cn/news/182652.html

相关文章:

  • 5.Vectors Transformation Rules
  • 聊聊httpclient的CPool
  • B2主题优化:WordPress文章每次访问随机增加访问量
  • 大模型部署手记(1)ChatGLM2+Windows GPU
  • Rust Rocket: 构建Restful服务项目实战
  • 苹果签名有多少种类之TF签名(TestFlight签名)是什么?优势是什么?什么场合需要应用到?
  • 如何将图片存到数据库(以mysql为例), 使用ORM Bee更加简单
  • 【“栈、队列”的应用】408数据结构代码
  • es的nested查询
  • <一>Qt斗地主游戏开发:开发环境搭建--VS2019+Qt5.15.2
  • python:进度条的使用(tqdm)
  • Java类型转换和类型提升
  • C# 读取 Excel xlsx 文件,显示在 DataGridView 中
  • Docker02基本管理
  • Scala第十章
  • 10.4 校招 实习 内推 面经
  • 从0开始深入理解并发、线程与等待通知机制(中)
  • UE5报错及解决办法
  • 怎么通过docker/portainer部署vue项目
  • 【面试经典150 | 矩阵】旋转图像
  • 机器人制作开源方案 | 家庭清扫拾物机器人
  • C++算法 —— 动态规划(8)01背包问题
  • ASUS华硕天选4笔记本FA507NU7735H_4050原装出厂Win11系统
  • 金蝶OA server_file 目录遍历漏洞
  • read_image错误
  • 文本分词排序
  • SQL与关系数据库基本操作
  • 【2023年11月第四版教材】第18章《项目绩效域》(第一部分)
  • Docker启动Mysql
  • QScrollArea样式