Today I Learned - Day 36 [3D 모드에서 타일셋 사용하기]
Unity 3D 작업물을 작업하다 보면 사물의 위치를 맞추는 것이 참 그렇게 까다로웠다.
가로세로 폭을 확인하면서 일정한 간격이 되고록 계산하면서 transform을 조작하고, 그런 와중에 배치를 바꾸려면 또 저 노가다(?)를 다시 해야한다.
솔직히 말해서 못해먹을 일이다. 배치 변경이 한 두번 하고 말 거면 모르겠는데, 그것도 아니다 보니 더더욱 힘들었다.
그래서, 2D 프로젝트에서 쓰였던 Layout Group 같은 기능이 없는지 알아보았다.
없지는 않을 거 같기도 했고, 없으면 내가 스크립트로 만들어서라도 제작해야 할 것만 같았다.
[물론, 이런 경우 테스트 도중이 아니면 볼 수가 없다는 점도 있어서 최후의 수단으로 생각 중이었다.]
그렇게 찾아낸 것이, TilePalette였다.
2D 환경에서만 쓸 수 있을 줄 알았는데 아니었다. [그래서 적잖이 당황했었다.]
그럼, 이제 어떻게 사용하는지 알아보자.
환경설정
3D 환경에서 TilePallet를 사용하려면 일단 패키지 사전 적용 옵션을 켜야 한다.
아무래도 정규 릴리즈 상황은 아닌 모양이다.
Edit - Project Settings - Package Manager에 들어간다.
위 사진 처럼 나올텐데, 그럼 Enable Pre-release Packages를 체크한다.
그러면 이제 3D 환경에서 타일맵을 어떻게 사용하는 지 보자.
오브젝트 세팅
3D 환경에서 타일맵을 사용하려면 다음 2 종류가 준비되어야 한다.
1. Grid 컴포넌트를 지닌 오브젝트
2. Tilemap 컴포넌트와 Tilemap Renderer 컴포넌트를 모두 지닌 오브젝트
[단, 2번 오브젝트는 1번의 자식 오브젝트여야 한다.]
이렇게 구성하고 상세 세팅을 해 보자. [정확히는 Grid를 세팅하는 것이다.]
Grid 컴포넌트의 인스펙터 창의 모습이다.
작업 중이던 프로젝트에서 찍어서 가져온 것이라 벌써부터 좀 작성되어 있긴 하나, 이것 만 보면 사용법을 알 수 있을 것이다.
그럼, 각 속성 별 역할을 살펴보자.
- Cell Size: 각 칸의 X, Y, Z의 크기.
- Cell Gap: 각 칸 간의 X, Y, Z 간격
- Cell Layout: 칸의 형태
- Rectangle: 사각형 모양으로 구성된다.
- Hexagon : 육각형 모양으로 구성된다.
- Isomatric: 마름모 모양으로 구성된다. 카메라 Y값을 45도로 돌린 느낌?
- Isomatric Z as Y: Z축을 Y처럼 사용한다. 정확히는 '에셋의 Z축을 높이로 사용한다.'
- Cell Swizzle: 칸의 축. XYZ를 기준으로 축을 치환하는 방식.
- XZY로 만들면 XY 기준인 타일맵에서 바닥을 그려낼 수가 있다.
위 설명을 보면 감을 잡았을 것이다.
Cell Size를 타일으로 사용할 오브젝트의 크기에 맞추고 Layout은 Rectangle(다른 형태라면 그 형태를 고르자.), Swizzle은 XZY로 설정하면 2D 맵에서 타일맵을 쓰듯이 사용할 수 있게 된다.
TilePalette
여기 까지 진행했다면, 이제 타일 팔레트를 열 시간이다.
Window - 2D - Tile Palette를 선택하자.
선택했다면 아래 창이 열릴 것이다.
마찬가지로 설정이 조금 되어있다.
다만, 설정할 게 그리 많지는 않다.
1. Default Brush를 GameObject Brush로 변경한 뒤,
2. Game Object에 배치할 오브젝트의 프리팹을 넣고,
3. 상단의 도구 아이콘 중에서 붓을 선택하면 끝.
이제 필드에 마우스를 두고 클릭하면 해당하는 격자에 오브젝트가 생성될 것이다.
사실, 오브젝트의 형태에 따라서 다른 옵션들을 만져서 세부 조정을 해야하긴 하나, 그건 환경과 프리팹에 따라서 다르므로 패스.
다른 오브젝트를 배치할 때에는 오브젝트를 일일히 수동으로 바꿔줘야 하기는 하나, 2D 환경에서 타일 팔레트를 사용하는 것과 비슷한 감각으로 사용할 수 있다.
다만, 한번 씩 격자가 Off 되면서 그리지 못하는 경우가 더러 나오기도 하고, 타일 팔레트도 그렇지만 원하는 오브젝트가 아님에도 오브젝트를 그려버린 탓에 크게 돌려가기도 하는 등, 아직은 불편한 점이 좀 있다.
참고로, Lock Z Position의 체크를 해제하고 Z Position을 변경하면 높이도 바꿀 수 있다.
물론, 타일 맵 오브젝트 자체의 높이를 높히는 방법도 유효하나, 천장을 그린다던지 하는 경우에는 이쪽을 쓰게 될 것이다.
그리고 회전 축은 Grid의 영향을 받지 않는지, 전체 맵의 Z축을 기준으로 회전해 버려서 [과 ]를 이용한 회전이 불가능하다. 각도가 다른벽을 그리고자 한다면 타일맵 오브젝트를 나눠서 각도를 조절하는 식으로 구성해야 한다.
이상, 3D 환경에서 타일맵을 사용하는 방법이었다.
이 방법을 쓰면 순식간에 바닥 배치가 끝나다 보니, 개인적으로는 프로젝트 진행 시간이 많이 줄어들은 거 같았다.
물론, 모든 3D 환경에서 유효하지는 않겠지만, 적어도 본인은 곧잘 쓸 거 같은 기능이었다.