공부/인프런 - Rookiss

Part 7-2-3. Unity 2D : TileMap Layer

셩잇님 2024. 12. 13. 15:35
반응형

 

 

🎞 Unity 2D

 

 지난 시간에는 타일 맵 에디터와 미리 다운로드 받은 에셋을 통해 각자의 맵을 자유롭게 꾸미고 만들 수 있었다. 이번 시간에는 이러한 타일 맵의 레이어의 개념을 도입해 맵끼리 서로 다른 레이어를 이용하도록 하는 방법에 대해 알아본다. 또한 이로 인한 이점이 무엇이 있고, 왜 이렇게 처리하는지 또한 알아보도록 하자.


 

💥 TileMap Layer

 

 맵을 만들다보면 경우에 따라 다양한 레이어가 필요하고 이것이 유용해지는 상황이 생긴다. 타일 맵 뿐만 아니라 일반 게임에서도 UI를 Layer로 구분해서 만들면 좋은 이점이, 생각해보면 타일맵에도 그대로 적용되는 것을 알 수 있다. 예를 들어 팝업 형태로 일반 UI 위에 뜨는 항목들이 그러하다. 이는 즉, 결국 무엇을 먼저 그려줘야 하는가?에 대한 답이기도 하다.

 

 그렇다면 레이어는 어디서 확인할 수 있을까? 이는 아래 이미지와 같다.

 

타일 맵 레이어 순서

 

 레이어는 작은 순서부터 그려지기 때문에, Tilemap_Base가 먼저 그려지고 그 위에 그 다음 레이어들의 항목들이 그려진다. 다음 레이어의 객체가 만약 반투명한 경우라면 어색하게 출력되는 것을 볼 수 있다. 왜냐하면 투명도 알파값이 존재하기 때문이다. 

 

따로 놀고있는 'rock' 객체

 

 따라서 이를 해결하기 위해서는 같은 레이어에 그리는 것이 아닌, 다른 레이어를 이용하여 이를 그려주면 된다. 먼저 기존에 만들어진 레이어를 복-붙하여 적당한 이름으로 설정하고, Order In Layer를 1로 설정하도록 한다. 이 후 새로 만들어준 레이어를 관리하기 위해 새로운 팔레트를 만들고 그리고자 하는 객체들을 무료 에셋 리소스에서 팔레트에 적당히 넣어주도록 하자.

 

새 레이어 전용 팔레트를 만들었다.
반투명 객체를 그려도 어색하지 않다.

 

 이 후, 새로운 물체를 그려주더라도 Base 레이어 위에 새롭게 그리기 때문에 위 그림과 같이 어색하게 나타나지가 않는 것을 볼 수 있다. 그 다음으로 맵의 하얀줄이 보이는 것이 이쁘지 않으므로 Project Setting - Quality - Anti Aliasing을 disable 처리하도록 하자. 이렇게 레이어를 구분해서 배치하는 장점 중 가장 큰 것은 바로 'Collision'의 문제이다. 

 

건물을 뚫고 다닐 순 없다.

 

 현재의 타일은 셀마다 이루어져 있는데 2D 게임의 경우, 우리가 배치한 건물을 플레이어가 이를 뚫고 다니며 이동할 수 없다. 즉 건물, 물 길 등이 다 이동 불가 지역으로 만들어져야 하는 것이다. 그렇지만 Collision 방식으로 이를 구현하면 생기는 문제점이 바로 서버에도 이를 알려줘야 한다는 것이다. 물론 클라이언트 영역에서 가고자 하는 영역에 가지 못한다면 알아서 걸러줄 수 있다. 하지만 실상은 그렇지 않다. 애시당초 전제조건 자체가 '클라이언트는 신용할 수 없다.'이다. 

 

 '클라이언트 영역에서 못가는 영역이므로, 서버에서는 이를 체크하지 않아야지.' 라는 생각은 너무 순진한 생각이다. 애시당초 클라이언트를 해킹하여 조작한다거나, 서버로 보내는 패킷을 해킹하는 등 다양한 방법이 난무하기 때문이다. 따라서 클라이언트와 서버가 크로스 체크가 필요하다. 만약 이를 체크하지 않는다면 유저가 빌딩 내부에 들어가서 공격을 한다거나, 월핵같은 문제가 발생한다.

 

 따라서 서버가 먼저 맵의 대한 정보를 1차적으로 받아오고, 이 후 NPC나 몬스터 들도 맵에 대한 데이터 정보를 받아야 한다. 그래야 이동하고 움직일 수 있으니까! 🤔

 

 

 

반응형