我正在使用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
来创建新块。另外,为什么数组索引超出范围?最后一个问题,这种结构化有什么好处吗?您将如何改进它或以不同的方式实施它?
答案 0 :(得分:1)
只需从您的: MonoBehaviour
类中删除Chunk
,因为您对此没有任何行为。这只是您的数据的持有人类,它不遵循(也不需要)MonoBehaviour扩展类所执行的开始-更新例程。