如何统一构造地形生成器?

时间:2018-07-29 16:19:33

标签: c# oop unity3d

我正在使用Unity学习C#,并且正在尝试创建Terrain Generator。我制作了一个名为Terrain的类,其中包含一个名为Chunk的类的数组。块应该是方形GameObjects的数组。

代码如下:

public class Terrain : MonoBehaviour {

    public Chunk[] terrain;

    // Use this for initialization
    void Start () {
        terrain[0] = new Chunk(0, 0);
    }
}

和类Chunk看起来像这样:

public class Chunk : MonoBehaviour {

    public int size;
    public GameObject tile;

    private GameObject[] chunk;
    private int xCoord, yCoord;

    public void Create(int chunkX, int chunkY){
        for(int y = 0; y < size; y++) {
            for(int x = 0; x < size; x++) {
                int xCoord = x + chunkX*size;
                int yCoord = y + chunkY*size;

                chunk[x + y*size] = GameObject.Instantiate(tile, new Vector3(xCoord, yCoord), Quaternion.identity);
                x = chunkX;
                y = chunkY;
            }
        }
    }

    //Constructor
    public Chunk(int chunkX, int chunkY) {
        xCoord = chunkX;
        yCoord = chunkY;
    }
}

我收到1个错误和1个警告:

You are trying to create a MonoBehaviour using the 'new' keyword.  This is not allowed.  MonoBehaviours can only be added using AddComponent().


IndexOutOfRangeException: Array index is out of range.

如何解决此问题,您能否用新手的术语解释为什么我不能使用new来创建新块。另外,为什么数组索引超出范围?最后一个问题,这种结构化有什么好处吗?您将如何改进它或以不同的方式实施它?

1 个答案:

答案 0 :(得分:1)

只需从您的: MonoBehaviour类中删除Chunk,因为您对此没有任何行为。这只是您的数据的持有人类,它不遵循(也不需要)MonoBehaviour扩展类所执行的开始-更新例程。