地图生成器工作类 (BasicTerrainMapGenerator)
功能说明
BasicTerrainMapGenerator 是一个基础地形地图生成器工作类,它基于柏林噪声(Perlin Noise)算法来生成地图的特定区域。通过配置不同的参数,您可以控制生成瓦片的类型、密度、大小和分布,从而创建出多样化的地形,如草地、沙漠、水域或山脉。
该生成器通过 MapGeneratorDef 中的 workClass 字段引用,其具体的行为由 value 字段中提供的 JSON 配置来控制。
可用参数
BasicTerrainMapGenerator 通过解析 MapGeneratorDef 中 value 字段里的 JSON 配置来工作。此 JSON 配置对应 BasicTerrainGeneratorConfig。
| JSON参数名 | XML参数名 (N/A) | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
tileDefName | N/A | 字符串 | DefaultTerrainTile | 必需。符合柏林噪声条件的区域将填充的 瓦片定义 (TileDef) 的 defName。 |
threshold | N/A | 浮点数 | 0.0 | 柏林噪声的最小阈值(-1到1之间),噪声值高于此值才可能放置 tileDefName 指定的瓦片。 |
maxThreshold | N/A | 浮点数 | 1.0 | 柏林噪声的最大阈值(-1到1之间),噪声值低于此值才可能放置 tileDefName 指定的瓦片。 |
ElseTileDefName | N/A | 字符串 | 无 (null) | 可选。当柏林噪声值不满足 threshold 和 maxThreshold 范围时,该区域将填充的 瓦片定义 (TileDef) 的 defName。如果为 null 则不放置任何瓦片。 |
scale | N/A | 浮点数 | 0.1 | 柏林噪声的缩放因子。值越大,地形特征(如山脉、湖泊)的尺寸越小;值越小,特征尺寸越大。 |
offsetX | N/A | 浮点数 | 0.0 | 柏林噪声在X轴上的偏移量,用于改变噪声图案的起始位置。 |
offsetY | N/A | 浮点数 | 0.0 | 柏林噪声在Y轴上的偏移量,用于改变噪声图案的起始位置。 |
mapCellSizeX | N/A | 整数 | 100 | 地图生成区域的宽度(以单元格数量计)。 |
mapCellSizeY | N/A | 整数 | 100 | 地图生成区域的高度(以单元格数量计)。 |
targetDimension | N/A | 枚举 (字符串) | Base | 指定生成瓦片的目标地图层。详见下文**MapDimension 枚举**。 |
originX | N/A | 整数 | 0 | 地图生成区域的左上角X坐标(以单元格数量计)。 |
originY | N/A | 整数 | 0 | 地图生成区域的左上角Y坐标(以单元格数量计)。 |
示例
以下是一个 MapGeneratorDef 的示例,它使用了 BasicTerrainMapGenerator 来生成一个基础的草地地图:
<Define>
<!-- 其他 TileDef 定义... -->
<TileDef>
<defName>Grass</defName>
<label>草地</label>
<texture>tileMap_Grass</texture>
<collider>None</collider>
<tileCost>0</tileCost>
</TileDef>
<MapGeneratorDef>
<defName>GrassBase</defName>
<label>草地基础生成器</label>
<description>使用柏林噪声生成一个均匀的草地基础地形。</description>
<workClass>BasicTerrainMapGenerator</workClass>
<value>
{
"tileDefName":"Grass", // 符合条件的区域填充为"Grass"瓦片
"mapCellSizeX":100, // 生成区域宽度100格
"mapCellSizeY":100, // 生成区域高度100格
"threshold":-1.0, // 柏林噪声的最小阈值。设为-1.0表示只要噪声值不低于-1.0且不高于maxThreshold,就放置瓦片
"maxThreshold":1.0, // 柏林噪声的最大阈值。设为1.0表示只要噪声值不高于1.0且不低于threshold,就放置瓦片
"scale":7.0, // 柏林噪声缩放因子,7.0会生成较小的特征
"targetDimension":"Base", // 在基础地形层生成
"originX":0, // 从地图的(0,0)点开始生成
"originY":0
}
</value>
</MapGeneratorDef>
<MapGeneratorDef>
<defName>BasicWaterAndLand</defName>
<label>基础水陆生成器</label>
<description>使用柏林噪声生成水域和陆地交错的地形。</description>
<workClass>BasicTerrainMapGenerator</workClass>
<value>
{
"tileDefName":"Water", // 噪声在 [0.0, 0.2) 区间放置水瓦片
"ElseTileDefName":"Grass", // 噪声在其他区间放置草地瓦片
"threshold":0.0, // 噪声值大于等于0.0
"maxThreshold":0.2, // 噪声值小于0.2
"scale":0.05, // 较大的地形特征,形成大片水域和陆地
"offsetX":100.0, // 额外偏移量,使每次生成的地形不同
"offsetY":50.0,
"mapCellSizeX":200, // 生成区域宽度200格
"mapCellSizeY":200, // 生成区域高度200格
"targetDimension":"Base" // 在基础地形层生成
}
</value>
</MapGeneratorDef>
</Define>
复杂参数说明
value 字段 (JSON配置)
- 说明:
MapGeneratorDef中的value字段是一个特别说明,它不使用标准的XML元素赋值方式,而是直接作为文本内容包含一个JSON格式的字符串。这个JSON字符串包含了BasicTerrainGeneratorConfig的所有配置参数,用于指导BasicTerrainMapGenerator的具体生成行为。您需要确保提供的JSON字符串是语法正确的。 - JSON属性与C#映射关系:
threshold:在JSON中,用于配置C#类中的MinThreshold属性。- 其他JSON属性名(如
tileDefName,scale等)与C#类中的对应属性名一致(忽略大小写差异,JSON通常使用驼峰式命名)。
- 示例:请参考上方的
MapGeneratorDef示例中value标签内的内容。
MapDimension 枚举 (地图层级)
- 说明:这是一个枚举类型,用于指定
BasicTerrainGeneratorConfig生成瓦片的目标地图层。不同的层级用于区分不同类型的地图元素,以便于渲染和逻辑处理。 - 可选值:
Base: 基础地形层,通常用于放置地面、水体等主要地形瓦片。Building: 建筑层,通常用于放置建筑结构、墙壁等可互动或阻挡的瓦片。Plant: 植物层,通常用于放置树木、草丛等植被瓦片。
- 示例:
"targetDimension":"Base""targetDimension":"Plant"