C# 像unity中的Terraria这样的基于随机平铺的地图生成?

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

我想使用Unity和C从游戏Terraria和Starbound中的瓷砖生成地图# 到目前为止我所做的一切都不起作用,我不知道为什么。。。有什么帮助/想法/建议吗

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);
            }