Я пытаюсь использовать Tilemaps в Unity, и я столкнулся со странным результатом. Я делаю движение по сетке вдоль плиток, поэтому у меня есть две TileMaps. Одна - это основа, которая имеет основание, вторая - это «Столкновение» TileMap, в котором есть деревья, камни и другие вещи, с которыми могут столкнуться мои персонажи.
Я хотел использовать HasTile, чтобы проверить Collision TileMap вместо того, чтобы беспокоиться с коллайдерами, так как я делаю движение на основе сетки, и частичные результаты будут потрачены впустую. Только я не могу заставить свой код распознавать плитки в коллайдере TileMap.
Я немного покопался и написал этот фрагмент кода
Tilemap bas = GameObject.FindGameObjectWithTag("Ground").GetComponent<Tilemap>();
Tilemap ter = GameObject.FindGameObjectWithTag("Terrain").GetComponent<Tilemap>();
Vector3Int t1 = new Vector3Int(1, 1, 0);
Vector3Int t2 = new Vector3Int(2, 1, 0);
Vector3Int t3 = new Vector3Int(1, 2, 0);
Vector3Int t4 = new Vector3Int(2, 2, 0);
Debug.Log("Ground: " + bas.name);
Debug.Log("Terrain: " + ter.name);
Debug.Log("1, 1 has a ground tile: " + bas.HasTile(t1));
Debug.Log("2, 1 has a ground tile: " + bas.HasTile(t2));
Debug.Log("1, 2 has a terrain tile: " + ter.HasTile(t3));
Debug.Log("2, 2 has a terrain tile: " + ter.HasTile(t4));`
Грубо, я знаю, но я просто хотел протестировать оба TileMaps в известных условиях, чтобы выяснить, правильно ли я использовал HasTile ().
Я настроил его так:
![I deleted the ground tile from (1,1) and added a tree to the Collision TileMap in (2,2)](https://i.stack.imgur.com/jfJ10.png)
Я удалил наземную плитку из (1,1) и добавил дерево в TileMap Collision в (2,2)
Результаты были удивительными! Он прочитал мой CollisionMap правильно, false для (1,2) и true для (2,2), и он правильно прочитал GroundTile (2,1) как true, но он также прочитал GroundTile (1,1) как true !!!
Нужно ли что-то сделать, чтобы обновить его, прежде чем он обнаружит, что плитка была стерта? Это ошибка? Могу ли я не доверять HasTile ()?