Плитки не удаляются по клику, как предполагается - PullRequest
0 голосов
/ 27 января 2020

Итак, у меня есть несколько плиток в одной и той же карте тайлов, я хочу удалить плитку по щелчку. Все выглядит нормально, но все равно не работает, вот код:

    private Tilemap tilemap;
    void Start()
    {
        tilemap = GetComponent<Tilemap>();
    }

    void Update()
    {
        Vector3 pos = Input.mousePosition;
        Collider2D hitCollider = Physics2D.OverlapPoint(Camera.main.ScreenToWorldPoint(pos));


        int posx = (int) pos.x;
        int posy = (int) pos.y ;
        int posz = (int) pos.z ;
        //Getting the position of the tile(where the mouse is)
        if (Input.GetMouseButtonDown(0)) //on click
        {

            if (hitCollider != null && hitCollider.CompareTag("Ground"))
            {
                tilemap.SetTile(new Vector3Int(posx, posy, posz), null);//delete the tile
            }
        }
    }

1 Ответ

2 голосов
/ 27 января 2020

Вы не можете просто сделать

Collider2D hitCollider = Physics2D.OverlapPoint(Camera.main.ScreenToWorldPoint(pos));

int posx = (int) pos.x;
int posy = (int) pos.y ;
int posz = (int) pos.z ;

Это просто приведение мировой позиции к (int), поэтому удаление десятичных дробей.


Что SetTile ожидает, что в качестве параметра достаточно индексов соответствующих плиток в пределах указанных Grid ячеек.

Unity автоматически создает Grid GameObject и устанавливает его в качестве родителя дочернего Tilemap GameObject.

Через этот компонент Grid (Tilemap.layoutGrid) вы можете получить индексы, используя Grid.WorldToCell например, возможно

tilemap.SetTile(tilemap.gridLayout.WorldToCell(hitCollider.transform.position), null));

Печатается на смартфоне, но я надеюсь, что идея проясняется

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