列表未显示正确的条目

时间:2018-12-20 03:47:49

标签: unity3d collections

我正在尝试使用以下世界经理类构建基于图块的世界:

 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;  

但是,当我运行代码时,会出现以下问题:切片在第一个调试语句中显示了正确的精灵和地形类型。但是,在第二个调试语句中,条目与第一个不同。 错误在哪里?

Console output

2 个答案:

答案 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);
    }
}

enter image description here enter image description here