Code behaves different when 1 line of code is added ?

Hello, I’m trying to create terrain but when added this line “tileInfo.Add(new TileInfo(sprite, x, y, GetTile(sprite).speed));” I get a strange result. Does anyone know what’ wrong with my code or what I’m doing wrong ?

Without that line: Screenshot by Lightshot

With that line: Screenshot by Lightshot

public static MapGenerator mapGenerator;

    public List<TileInfo> tileInfo;
    public GameObject tilePrefab;
    public GameObject map;
    public List<Tiles> tiles;
    public int mapSize;

    private Dictionary<int, Tiles> tilesToChooseFrom = new Dictionary<int, Tiles>();

    [System.Serializable]
    public class Tiles
    {
        public string tileName;
        public Sprite tileSprite;
        public float speed;
        public int spawnChance;
        public int spreadChance;
    }

    [System.Serializable]
    public class TileInfo
    {
        public Sprite tile;
        public int x, y;
        public float speed;
        private Sprite sprite;

        public TileInfo(Sprite sprite, int x, int y, float speed)
        {
            this.sprite = sprite;
            this.x = x;
            this.y = y;
            this.speed = speed;
        }
    }

    public void CreateMap()
    {
        int totalWeight = 0;
        foreach (Tiles tile in tiles)
        {
            tilesToChooseFrom.Add(tile.spawnChance, tile);
            totalWeight = totalWeight + tile.spawnChance;
        }

        for (int y = 0; y < mapSize; y++)
        {
            for (int x = 0; x < mapSize; x++)
            {
                Sprite sprite = null;
                if (GroupedTile(x , y))
                {
                    int spreadChance = 0;
                    foreach (KeyValuePair<int, Tiles> entry in tilesToChooseFrom)
                    {
                        //Debug.Log(map.transform.Find("tile:" + (x - 1) + "-" + y).GetComponent<SpriteRenderer>().sprite);
                        if(map.transform.Find("tile:" + (x - 1) + "-" + y).GetComponent<SpriteRenderer>().sprite.name == "Dirt")
                        {
                            spreadChance = GetTile(map.transform.Find("tile:" + x + "-" + (y -1)).GetComponent<SpriteRenderer>().sprite).spreadChance;
                        }else { spreadChance = GetTile(map.transform.Find("tile:" + (x - 1) + "-" + y).GetComponent<SpriteRenderer>().sprite).spreadChance; }
                        
                    }

                    int chance = Random.Range(1, 100);
                    if(chance <= spreadChance)
                    {
                        if (map.transform.Find("tile:" + (x - 1) + "-" + y).GetComponent<SpriteRenderer>().sprite.name == "Dirt")
                        {
                            sprite = map.transform.Find("tile:" + x + "-" + (y -1)).GetComponent<SpriteRenderer>().sprite;
                        }
                        else { sprite = map.transform.Find("tile:" + (x - 1) + "-" + y).GetComponent<SpriteRenderer>().sprite; }
                    }else
                    {
                        chance = Random.Range(1, totalWeight);
                        int counter = 0;
                        foreach (KeyValuePair<int, Tiles> entry in tilesToChooseFrom)
                        {
                            counter = counter + entry.Key;
                            if (chance <= counter)
                            {
                                sprite = entry.Value.tileSprite;
                                break;
                            }
                        }
                    }
                }
                else
                {
                    int chance = Random.Range(1, totalWeight);
                    int counter = 0;
                    foreach (KeyValuePair<int, Tiles> entry in tilesToChooseFrom)
                    {
                        counter = counter + entry.Key;
                        if (chance <= counter)
                        {
                            sprite = entry.Value.tileSprite;
                            break;
                        }
                    }
                }

                GameObject tile = Instantiate(tilePrefab, new Vector2(x, y), Quaternion.identity);
                tile.transform.SetParent(map.transform);
                tile.name = "tile:" + x + "-" + y;
                tile.GetComponent<SpriteRenderer>().sprite = sprite;
                tileInfo.Add(new TileInfo(sprite, x, y, GetTile(sprite).speed));
            }
        }

        for(int i = 0; i < map.transform.childCount; i++)
        {
            GameObject tile = map.transform.GetChild(i).gameObject;
            int x = int.Parse(tile.name.Split(':')[1].Split('-')[0]);
            int y = int.Parse(tile.name.Split(':')[1].Split('-')[1]);

            int closedSides = 3;
            int currentSides = 0;
            Sprite tileSprite = null;

            if (map.transform.Find("tile:" + (x - 1) + "-" + (y - 1)) & map.transform.Find("tile:" + (x + 1) + "-" + (y + 1)))
            {
                if (map.transform.Find("tile:" + (x - 1) + "-" + y).GetComponent<SpriteRenderer>().sprite.name != "Dirt") {
                    tileSprite = map.transform.Find("tile:" + (x - 1) + "-" + y).GetComponent<SpriteRenderer>().sprite;
                    currentSides++;
                }
                if (map.transform.Find("tile:" + x + "-" + (y -1)).GetComponent<SpriteRenderer>().sprite.name != "Dirt") {
                    tileSprite = map.transform.Find("tile:" + x + "-" + (y - 1)).GetComponent<SpriteRenderer>().sprite;
                    currentSides++;
                }
                if (map.transform.Find("tile:" + (x + 1) + "-" + y).GetComponent<SpriteRenderer>().sprite.name != "Dirt") {
                    tileSprite = map.transform.Find("tile:" + (x + 1) + "-" + y).GetComponent<SpriteRenderer>().sprite;
                    currentSides++;
                }
                if (map.transform.Find("tile:" + x + "-" + (y + 1)).GetComponent<SpriteRenderer>().sprite.name != "Dirt") {
                    tileSprite = map.transform.Find("tile:" + x + "-" + (y + 1)).GetComponent<SpriteRenderer>().sprite;
                    currentSides++;
                }

                if(currentSides >= closedSides)
                {
                    tile.GetComponent<SpriteRenderer>().sprite = tileSprite;
                }
            }
        }
    }

    private bool GroupedTile(int x, int y)
    {
        if (map.transform.Find("tile:" + (x -1) + "-" + (y -1)))
        {
            //Debug.Log(map.transform.Find("tile:" + x + "-" + y));
            if (map.transform.Find("tile:" + (x -1) + "-" + y).GetComponent<SpriteRenderer>().sprite.name != "Dirt") {
                return true;
            }else if (map.transform.Find("tile:" + x + "-" + (y - 1)).GetComponent<SpriteRenderer>().sprite.name != "Dirt")
            {
                return true;
            }
        }
        return false;
    }

    public Tiles GetTile(Sprite sprite)
    {
        foreach(Tiles tile in tiles)
        {
            if(tile.tileSprite = sprite)
            {
                return tile;
            }
        }

        return null;
    }

    private void Start()
    {
        CreateMap();
    }

Hey @Jens00, that is actually 3 lines of code you’re wrapped into 1. If something stops working, it’s a good bet one of those 3 is failing, or you are not putting the code where it should go, or generally there is something in your logic that is amiss:

tileInfo.Add(
    new TileInfo(sprite, x, y,
          GetTile(sprite).speed
    )
) 

You’re going to need to debug each - starting with GetTile( sprite ).speed.

Make sure it is returning what you think it should. Some things to check are, is sprite valid?

From there, is ‘new TileInfo’ working?