C# 像unity中的Terraria这样的基于随机平铺的地图生成?
我想使用Unity和C从游戏Terraria和Starbound中的瓷砖生成地图# 到目前为止我所做的一切都不起作用,我不知道为什么。。。有什么帮助/想法/建议吗C# 像unity中的Terraria这样的基于随机平铺的地图生成?,c#,random,map,unity3d,procedural,C#,Random,Map,Unity3d,Procedural,我想使用Unity和C从游戏Terraria和Starbound中的瓷砖生成地图# 到目前为止我所做的一切都不起作用,我不知道为什么。。。有什么帮助/想法/建议吗 using UnityEngine; using System.Collections; public class MapGeneration : MonoBehaviour { public int mapWidth, mapHeight, spreadDegree; GameObject[,] blocks; public Ga
using UnityEngine;
using System.Collections;
public class MapGeneration : MonoBehaviour {
public int mapWidth, mapHeight, spreadDegree;
GameObject[,] blocks;
public GameObject baseBlock;
public int maxHeightAllowed;
public int nullDispersion;
int dispersionZone;
void Start() {
GenerateMap();
}
void GenerateMap() {
dispersionZone = maxHeightAllowed - nullDispersion;
blocks = new GameObject[mapWidth, mapHeight];
for(int x = 0; x < blocks.GetLength(0); x++) {
for(int y = nullDispersion; y <= maxHeightAllowed; y++) {
int heightDiff = y - nullDispersion;
float dispersionModifier = Mathf.Sin( (heightDiff / dispersionZone) * 90);
float random = Random.Range(0, 1);
if(random > dispersionModifier) {
blocks[x,y] = (GameObject)Instantiate(baseBlock, new Vector2(x, y), Quaternion.identity);
} else if (y < blocks.GetLength(1) && blocks[x,y+1] != null) {
blocks[x,y] = (GameObject)Instantiate(baseBlock, new Vector2(x, y), Quaternion.identity);
}
}
for(int y = 0; y < nullDispersion; y++) {
blocks[x,y] = (GameObject)Instantiate(baseBlock, new Vector2(x, y), Quaternion.identity);
}
}
}
}
使用UnityEngine;
使用系统集合;
公共类映射生成:单行为{
公共int地图宽度、地图高度、扩展度;
游戏对象[,]块;
公共游戏对象基块;
允许公共整数最大高度;
公共信息传播;
内分散带;
void Start(){
生成映射();
}
void GenerateMap(){
色散区=允许的最大高度-零色散;
blocks=新游戏对象[mapWidth,mapHeight];
对于(intx=0;x
这是整数除法。使用(高度差/(浮动)分散区)
* 90
Mathf.Sin
以弧度而非度数工作。使用*Math.PI/2
if(random > dispersionModifier) {
blocks[x,y] = (GameObject)Instantiate(baseBlock, new Vector2(x, y), Quaternion.identity);
} else if (y < blocks.GetLength(1) && blocks[x,y+1] != null) {
blocks[x,y] = (GameObject)Instantiate(baseBlock, new Vector2(x, y), Quaternion.identity);
}
if(随机>色散修改器){
块[x,y]=(游戏对象)实例化(基块,新向量2(x,y),四元数.identity);
}else if(y
创建相同类型的块时,为什么要使用if?if和else中的身体不应该有某种区别吗?你需要说什么不起作用。到目前为止我只看到一个代码转储。啊。。目前它只生成一个实体块。。。它应该创建一个像Terraria这样的随机地图…:)
if(random > dispersionModifier) {
blocks[x,y] = (GameObject)Instantiate(baseBlock, new Vector2(x, y), Quaternion.identity);
} else if (y < blocks.GetLength(1) && blocks[x,y+1] != null) {
blocks[x,y] = (GameObject)Instantiate(baseBlock, new Vector2(x, y), Quaternion.identity);
}