基于随机瓦片的地图生成,如团结中的Terraria

本文关键字:Terraria 于随机 地图 | 更新日期: 2023-09-27 18:28:30

我想用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);
            }
    }
}
}

基于随机瓦片的地图生成,如团结中的Terraria

(heightDiff / dispersionZone)

这是整数除法。请改用(heightDiff / (float)dispersionZone)

* 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?if和else中的身体之间难道不应该有某种区别吗?