我正在尝试使用以下世界经理类构建基于图块的世界:
List<Tile> tiles = new List<Tile>();
for (int y = 0; y <= worldHeight-1; y++) {
for (int x = 0; x <= worldWidth-1; x++) {
Tile tileToInstantiate = (Tile) Resources.Load("Prefabs/Tile", typeof(Tile));
Instantiate(tileToInstantiate, new Vector2(x, y), Quaternion.identity, world);
tiles.Add(tileToInstantiate);
}
}
foreach (Tile aTile in tiles) {
Debug.Log("D2: " + aTile.GetTerrainType());
}
Tile类的定义如下:
private void Awake() {
int random = (int)Random.Range(0, 100);
if (random <= GameManager.instance.worldManager.amountOfWater){
terrainType = TerrainType.Water; } else {
terrainType = TerrainType.Land;}
Debug.Log("D1: " + GetTerrainType());
spriteRenderer = GetComponent<SpriteRenderer>();
switch (terrainType) { {
case TerrainType.Land:
spriteRenderer.sprite = GameManager.instance.tileSprites[0];
break;
case TerrainType.Water:
spriteRenderer.sprite = GameManager.instance.tileSprites[1];
break;
但是,当我运行代码时,会出现以下问题:切片在第一个调试语句中显示了正确的精灵和地形类型。但是,在第二个调试语句中,条目与第一个不同。 错误在哪里?
答案 0 :(得分:0)
似乎您是在将Tile的预制件添加到列表中,而不是在创建的实例中添加。因此,它使用的是预制的默认值(我认为是Land)。
我现在无法测试,但我认为它看起来应该更像
。Tile t = Instantiate(tileToInstantiate, new Vector2(x, y), Quaternion.identity, world);
tiles.Add(t);
答案 1 :(得分:0)
正如Thomas所说,您正确生成了图块。但是您没有将实例添加到列表中。
void Start () {
List<Tile> tiles = new List<Tile>();
for (int y = 0; y < 4; y++)
{
Tile tileToInstantiate = (Tile)Resources.Load("Prefabs/TilePrefab", typeof(Tile));
Tile tileInstance = Instantiate(tileToInstantiate, tileParent.transform);
tiles.Add(tileInstance);
}
foreach (Tile aTile in tiles)
{
Debug.Log("D2: " + aTile.type);
}
}