07
07

Z축만 설정해주면 알아서 스프라이트 순서가 정렬되는 3D 게임과는 달리 2D 게임에선 부가적으로 스프라이트 앞뒤 순서를 정렬해주어야 한다.

이 글에선 강의에선 잘 설명해주지 않는 유니티 기본 기능만을 사용해 스크립트 없이 원하는 정렬을 보여주는 팁 몇 가지를 간단히 소개해보고자 한다.

 


 

1. position - y값으로 정렬 (Cutsom Axis)

position의 Z값으로 보여줄 스프라이트의 앞뒤 순서를 정렬하는 방법은 누구나 다 알 것이다. 애초에 Z축 자체가 좌표 상 깊이를 나타내기 때문이다.

하지만 2D 게임에선 굳이 Z축을 사용할 이유가 없다. main camera 설정에서 Projection을 Orthogaphic으로 설정해 깊이감 효과를 주지 않는다면 더더욱 그렇다. 근데 스프라이트 앞뒤 순서를 맞춰야하니 X, Y축을 건드리는 스크립트에서 Z축까지 설정해준다? Collider2D를 사용하는 이상 의미도 없고 맵이 커지면 배경 이미지를 뚫고 뒤로 들어가기라도 할 것 같고 어딘가 영 찝찝하다.

 

그런데 여기서 아주 간단하게 Y축으로 이미지를 정렬하는 방법이 있다.

Edit > Project Settings > Graphics에서 Transparency Sort Mode를 Cutsom Axis로 설정하고, Y값을 1로 맞추면 된다.
이 숫자는 간단히 말해 어느 축을 기준으로 이미지를 정렬할건지 결정하는 값이라 생각하면 된다.(더 자세한 설명은 하단 링크 참고)

이미지에선 Z축에 아예 영향을 받지 않기 위해 0으로 맞췄는데, 이 부분은 취향껏 선택해주면 되겠다. 참고로 소수 값도 가능하다.

Z값을 따로 설정해주지 않았음에도 멀쩡하게 잘 나오는 걸 볼 수 있다.

 


 

2. Order in Layer로 정렬 (Sorting Group)

Sprite Renderer 이미지 정렬과 관련해 Sorting Lyaer와 Order in Layer는 이미 알고 있을 것이다. 규칙은 단순하다. Sorting Layer의 정해진 순서대로 먼저 이미지를 보여주고, 같은 레이어 내에선 Order in Layer 값이 더 크면 앞에, 작으면 뒤에 배치된다.

고양이 뒤 고양이가 아니라 고양이 위 고양이가 되어버렸다.

그런데 만약 하나의 오브젝트 내에서 캐릭터 다리, 몸통 등을 Order in Layer로 앞뒤 설정을 해줬는데, 이걸 게임에 넣고 보니 옆에 있는 다른 캐릭터의 다리와 겹쳐버린다면? 위와 같이 팔다리가 따로 노는 불상사가 발생하고 만다.

하나의 캐릭터는 하나의 Order in Layer 값을 가져야 자연스럽게 캐릭터끼리 앞뒤가 나눠질텐데, 파츠마다 Order in Layer가 다르니 그게 안 되는 것이다. 그렇다고 Order in Layer 값을 하나로 통일하면 팔이 옷을 뚫고 나와버리고, 이건 위에서 설정한 Custom Axis로도 해결할 수가 없다.

 

이럴 때 간단히 Order in Layer를 통일해주는 방법이 있다. 바로 Sorting Group을 사용하는 것.

사용법은 간단하다. 통일하고 싶은 Sprite들의 최상위 오브젝트에 Sorting Group을 붙여주고, 원하는 레이어 값과 Order를 설정하면 끝이다. 그럼 해당 오브젝트 내의 Order in Layer 값은 지켜지되, 하나의 캐릭터가 하나의 Order in Layer를 가질 수 있다.

 


 

사실 두 방법 모두 최근에 생긴 기능은 아니다. 근데 한국에서 들을 수 있는 유니티 2D 강의에선 아무도 설명해주지 않아 필자도 최근에야 알았다. 만약 우연히 구글링에 나오지 않았더라면 필자는 지금도 Z축을 일일이 맞춰주고 Order in Layer 노가다를 하고 있었을 것이다...

여러모로 끔찍한 이 상황을 지금도 겪고 있을 사람들을 위해 짤막하게나마 글로 남겨본다.

 


 

↘ 참고

 

2D 정렬 - Unity 매뉴얼

Unity는 타입과 용도에 기반한 우선 순위에 따라 렌더러를 정렬합니다. 렌더러 대기열을 통해 렌더러의 렌더 순서를 지정할 수 있습니다. 일반적으로 두 가지 메인 대기열, 즉 불투명 대기열과 투

docs.unity3d.com

 

정렬 그룹 - Unity 매뉴얼

정렬 그룹 을 사용하면 그룹 게임 오브젝트를 스프라이트 렌더러와 함께 그룹화하고, 해당 스프라이트를 렌더링하는 순서를 제어할 수 있습니다. Unity는 스프라이트 렌더러를 동일한 정렬 그룹

docs.unity3d.com

 

COMMENT