【发布时间】:2018-07-29 16:19:33
【问题描述】:
我正在使用 Unity 学习 C#,并且正在尝试创建地形生成器。我创建了一个名为Terrain 的类,其中包含一个名为Chunk 的类数组。 Chunk 应该是方形游戏对象的数组。
代码如下所示:
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 来创建一个新块。另外,为什么数组索引超出范围?最后一个问题,这种结构有什么好处吗?您将如何改进它或以不同的方式实现它?
【问题讨论】:
-
为什么
Chunk必须是MonoBehavior?通常行为附加到游戏对象,这就是为什么你不能直接创建它们。另一个错误很简单,你没有初始化数组,所以[0]在start方法中不存在。 -
说实话,我仍然不明白“:MonoBehavior”是什么意思,即使我读过它。请用几句话解释一下好吗?
-
它将你的类变成可以附加到游戏对象的东西,然后包括像
Start和Update这样运行的方法,以便你可以更新该游戏对象的属性。如果您不必将其附加到游戏对象,请不要从MonoBehavior派生。在尝试编写脚本之前,您真的应该通读 User Manual,而不知道事情是如何工作的。 -
谢谢罗恩!我会看说明书的。