CSV 구조에 맞춰 타일맵 에디터를 만들어서 사용하고 있었다.
유니티 에디터 자체를 확장한게 아닌 그냥 하나의 씬을 만들었다. 너무 불편했다..
- 불편했던 점
- 일일히 씬을 실행시켜야 되는점.
- CSV 파일을 불러오기 전까지 맵을 미리 볼 수 없다는 점
- 타일에 들어갈 정보가 많아지니 CSV 한 셀에 들어가는 데이터가 너무 지저분해짐
- 타일 정보 추가될 때마다 CSV 파싱 및 만든 에디터를 자꾸 수정해야 함.
이 4가지 이유 때문에 유니티에서 제공하는 Tilemap으로 바꾸기로 결정했다.
출시초에 버그도 많았지만 지금 많이 고쳐졌고 있더라도 어느정도 솔루션을 찾아할 수 있는 것 같았다.
(lineBrush는 팔레트에 그려져 버리는 버그가 아직도 있다. 밑에서도 설명하지만 팔레트도 타일맵이어서 그런듯)
추가로 유니티에서 제공하는 확장 2d extra 에셋에 Prefab Brush가 있다.(2d extra 검색해서 다운 가능)
2:00(브러쉬 사용 예시 영상)
매력적이어서 이걸 커스텀해서 현재 진행하고 있는 프로젝트에 쓰기로 결정했다.
프리팹 브러쉬는 영상처럼 프리팹을 드래그 해서 등록해 해당 프리팹을 일일히 끌어다쓰는게 아닌 말 그대로 브러쉬처럼 쉽게 씬에 인스턴스화 할 수 있다.
그런데 등록된 프리팹들을 쓰는 것이기에 내가 쓰려는 목적과는 살짝 상이했다.
내가 사용하고자 하는 목적은
- 기본틀이 되는 프리팹을 등록
- 팔레트에서 타일 선택
- 선택한 타일 스프라이트로 자동으로 교체되어 인스턴스화
이 세가지가 되어야 했다. 그래서 Prefab Brush를 수정해 쓰기로 했다.
기존 Prefab Brush에 있는 내용을 복사하고 Perlin 같이 안쓰는 변수들을 다 삭제해주자.
하면서 가장 발목을 잡았던게 "어떻게 팔레트에 있는 타일 정보를 가져오는가?" 였다.
써보면 알겠지만 프리팹브러쉬는 씬에 들어가지만 일반 브러쉬로 칠한 스프라이트는 게임오브젝트 하위 어디에도 표시 되지 않는다.
타일맵 소스코드를 이러저리 보다가 얻은 결론은 다음과 같다.
- 타일 팔레트에 추가한 타일들도 하나의 "타일맵"에 존재한다.(아래 팔레트 구조)
- 타일셀(이하 타일) 정보를 가져오려면 "타일맵" 컴포넌트를 통해서 가져와야 한다.
그럼 커스텀 브러쉬를 제작해보자.
Pick 함수를 새로 정의해주자.
public override void Pick(GridLayout gridLayout, GameObject brushTarget, BoundsInt position, Vector3Int pivot)
{
base.Pick(gridLayout, brushTarget, position, pivot);
Tilemap palette = brushTarget.GetComponent<Tilemap>();
if (palette == null)
return;
Vector3Int palettePosition = position.position;
TileBase tile = palette.GetTile(palettePosition);
if (tile != null)
{
selectedSprite = ((Tile)tile).sprite;
}
}
brushTarget 파라미터가 타일맵이다. 위에서 말한 것처럼 팔레트도 타일맵으로 되어있다.
타일을 가져오는게 까다로운데 Tilemap 안에 있는 GetTile(타일위치)를 통해 가져와야 된다. 여기서 타일 위치는 셀좌표다. TileBase를 Tile로 캐스팅까지 해주자. 원래 같으면 TileData구조체를 통해 해야되지만 스프라이트만 필요해서 저렇게 했다.
Paint함수에서는 SpriteRender 컴포넌트에서 sprite를 바꿔주면 된다.
instance.GetComponent<SpriteRenderer>().sprite = selectedSprite;
instance.transform.SetParent(brushTarget.transform);
instance.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(position + m_Anchor));
'유니티 > 작업일지' 카테고리의 다른 글
[Unity]BSP(Binary Space Partitioning)를 이용한 던전 룸 생성 - 01 (0) | 2023.07.12 |
---|---|
[Unity]일기1 - 타일맵 삽질 (1) | 2019.10.20 |
[Unity]2D 타일맵 에디터 수정/제작 (0) | 2018.02.18 |
[Unity]C,C++로 작업한 타일기반게임을 유니티로 컨버팅 중입니다. (0) | 2018.02.08 |