TileMap Collision

Eunho Bae·2022년 5월 17일

갈 수 없는 영역 세팅

Tilemap Collider 2D 컴포넌트를 추가하면 자동으로 스프라이트마다 collider 영역을 정해주는데 상황에 맞게 영역을 조정하는데 한계가 있기 때문에 해당 컴포넌트를 쓰기 보다는 레이어를 하나 더 만들어서 직접 충돌 영역을 정해주는게 좋다고 한다.

해당 강의에서는 rock 스프라이트를 이용해 갈 수 없는 영역이라는 것으로 해놓았다.

Grid 산하에 Tilemap_Collision을 하나 만들고 order in layer는 크게 잡아 놓아서 갈 수 없는 영역이 어디에 존재하는지 쉽게 확인하도록 했다.

rock 좌표 추출

먼저 TestCollision.cs를 만들고 Tilemap_Collision에 컴포넌트로 추가해서 테스트해보자

rock이 깔린 영역과 깔리지 않은 영역을 구분한 텍스트파일을 추출해 보려고 한다.

TestCollision에 public으로 Tilemap 변수를 선언하고 연결시킨다.
그리고 foreach문으로 타일을 2차원 배열 순회하듯이 돌면서 타일을 하나씩 받아온 후 null이 아니라면 List에 좌표를 추가하는 식으로 구현했다. (Tilemap_Collision에는 rock 이외에는 존재하지 않기 때문)

리스트에 총 51개의 rock의 좌표가 들어가 있다.

public class TestCollision : MonoBehaviour
{
    public Tilemap _tilemap;
    //public TileBase _tile;

    void Start()
    {
        //_tilemap.SetTile(new Vector3Int(0, 0, 0), _tile);
    }


    void Update()
    {
        List<Vector3Int> blocked = new List<Vector3Int>();
        
        foreach(Vector3Int pos in _tilemap.cellBounds.allPositionsWithin)
        {
            TileBase tile = _tilemap.GetTile(pos);
            if (tile != null)
                blocked.Add(pos);
        }
    }
}
profile
개인 공부 정리

0개의 댓글