Список не показывает правильные записи - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь построить мир на основе плиток, используя следующий класс менеджера мира:

 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());
 }

Класс плиток определяется следующим образом:

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 голосов
/ 20 декабря 2018

Как сказал Томас, вы правильно генерируете плитки.Но вы не добавили экземпляр в список.

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

0 голосов
/ 20 декабря 2018

Похоже, вы добавляете префаб вашей плитки в список вместо созданного экземпляра.Таким образом, вместо этого используется значение по умолчанию для префаба (которое, как я полагаю, является Land).

Я не могу проверить это прямо сейчас, но я считаю, что оно должно выглядеть более похоже.

Tile t = Instantiate(tileToInstantiate, new Vector2(x, y), Quaternion.identity, world);
tiles.Add(t);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...