Unity 2019.3.9f1: с помощью TileMap.HasTile () это нормально? - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь использовать 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)

Я удалил наземную плитку из (1,1) и добавил дерево в TileMap Collision в (2,2)

Результаты были удивительными! Он прочитал мой CollisionMap правильно, false для (1,2) и true для (2,2), и он правильно прочитал GroundTile (2,1) как true, но он также прочитал GroundTile (1,1) как true !!!

Нужно ли что-то сделать, чтобы обновить его, прежде чем он обнаружит, что плитка была стерта? Это ошибка? Могу ли я не доверять HasTile ()?

1 Ответ

0 голосов
/ 19 апреля 2020

Хорошо, я нашел это! У меня WAAAY было слишком много времени, но я нашел ответ.

По сути, я начал с предположения, что координаты моего персонажа совпадают с координатами TileMap. Это неправильно.

Так что ответом было изменить мой код следующим образом:

Vector3Int t1 = new Vector3Int(1, 1, 0); t1 = bas.WorldToCell(t1);
Vector3Int t2 = new Vector3Int(2, 1, 0); t2 = bas.WorldToCell(t2);
Vector3Int t3 = new Vector3Int(1, 2, 0); t3 = ter.WorldToCell(t3);
Vector3Int t4 = new Vector3Int(2, 2, 0); t4 = ter.WorldToCell(t4);

и теперь он прекрасно работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...