Search Unity

Unity를 이용하여 2D 게임을 만들 계획이신가요? 이번 포스팅에서는 2D 테크니컬 프로덕트 매니저 러스 스캐멜과 2D 프로덕트 마케팅 매니저 에두아르도 오리즈가 템플릿을 이용하여 쉽게 게임 개발을 시작하는 방법과 전체 프로젝트를 진행하면서 참고할 수 있는 유용하고 효율적인 팁을 소개합니다.  

2D 템플릿으로 2D 프로젝트 시작하기

새로운 프로젝트를 빠르게 시작하려면 2D 템플릿을 사용해 보세요. 템플릿은 Unity Hub에서 이용 가능하며, 다음과 같은 설정을 제공합니다. 

  • 2D 뷰를 사용하고 직교 투영으로 설정된 카메라가 있는 단색 기본 씬
  • 새 텍스처를 스프라이트로 임포트할 수 있도록 2D 모드로 기본 설정된 에디터
  • 비활성화된 실시간 전역 조명
  • 필수 종속성과 2D Animation2D Pixel Perfect2D PSD Importer2D SpriteShape 등의 2D 패키지 설치

2020.2부터 게임 오브젝트 및 에셋 생성을 위한 2D 메뉴 항목이 최상위 메뉴로 표시됩니다. 여기에는 빠른 프로토타이핑을 위한 기본 2D 스프라이트 세트가 포함되며 SpriteShape, Pixel Perfect 카메라와 같은 최신 기능도 메뉴에 추가됩니다. 

스프라이트의 단위당 픽셀 선택

단위당 픽셀(PPU)은 2D 개발에서 중요한 개념입니다. 스프라이트의 PPU에 따라 스프라이트 이미지에서 몇 픽셀의 너비 또는 높이가 월드 공간의 거리 한 단위에 해당하는지 결정됩니다. 

스프라이트의 PPU는 프로젝트 제작 초기에 고려하는 것이 좋습니다. PPU는 픽셀 밀도를 제어할 뿐 아니라 타일맵과 같은 시스템과 스프라이트 렌더러의 드로우 모드에서 스프라이트를 사용하는 방식에도 영향을 미칩니다. 게임의 디자인과 타겟 플랫폼에 알맞은 픽셀 밀도를 선택하고 불필요하게 큰 텍스처는 피하도록 합니다. 

2D PSD Importer 사용

2D PSD Importer는 레이어가 적용된 Adobe Photoshop PSB 파일을 Unity로 임포트합니다. 임포트한 레이어에서 스프라이트 시트를 자동으로 생성해 주는 Mosaic와 Unity에서 캐릭터의 스프라이트를 소스 파일에 배열된 대로 다시 조합하는 Character Rig과 같은 기능을 사용할 수 있습니다. Importer는 2D 애니메이션 시스템과 멀티 레이어 캐릭터 워크플로에서 최적으로 작동하도록 설계되었습니다.

겹치는 픽셀 줄이기

화면에 최종 색상을 그리는 데 필요한 패스의 수를 줄이는 것을 목표로 해 보세요. 픽셀이 반투명하다면 최종 색상을 계산할 때 각각의 겹치는 픽셀을 반드시 고려해야 합니다. 특히 성능이 다소 떨어지는 기기를 사용하거나 더 높은 프레임 속도가 필요한 경우에 투명 픽셀을 여러 번 덧그리면 GPU 성능이 떨어집니다. 씬에 있는 모든 스프라이트는 투명한 것으로 간주되지만, 오버드로우를 줄일 수 있는 방법이 있습니다.

Unity는 스프라이트 마스크 내의 픽셀만 오버드로우합니다. Full Rect를 사용하면 전체 영역을 오버드로우하지만, Mesh Type이 Tight로 설정되어 있으면 생성된 메시가 스프라이트의 윤곽만 따라가고 빈 영역은 무시하므로 오버드로우할 영역이 줄어듭니다. 메시의 윤곽을 더 정교하게 제어하려면 Sprite Editor에서 변경하면 됩니다.

겹치는 정적 스프라이트를 병합하여 오버드로우를 줄일 수도 있습니다. 스프라이트가 움직이지 않아도 되거나 패럴랙스 이펙트에 스프라이트가 필요하지 않다면 레벨 디자인이 마무리된 후 병합하는 방안도 고려해 볼 수 있습니다.

콜라이더 합치기

정적 2D 콜라이더가 포함된 스프라이트가 많다면 복합 콜라이더 2D 컴포넌트와 결합하세요. 성능이 향상되고 전체 표면과의 충돌이 더욱 부드럽게 구현됩니다. 복합 콜라이더는 타일맵과도 함께 사용할 수 있는데, 위의 이미지에서 화면의 보라색 타일이 콜라이더로 사용되었습니다. 컴포넌트를 추가한 다음 Composite 항목을 체크하면 활성화됩니다.

복합 콜라이더 2D는 부모 게임 오브젝트와도 함께 사용할 수 있습니다. 이 경우 Used by Composite 항목을 체크하여 자녀 콜라이더를 활성화해야 합니다. 게임 오브젝트와 어울리는 간단한 폴리곤을 직접 만드는 방식으로도 콜라이더를 최적화할 수 있습니다.

타일맵 렌더러

스프라이트와 같은 게임 오브젝트에 연결된 모든 렌더러에는 약간의 오버헤드가 있기 마련입니다. 수많은 정적 스프라이트를 효율적으로 표시하려면 타일맵 렌더러를 사용하여 더 뛰어난 성능으로 편리하게 게임을 디자인해 보세요. 단 하나의 렌더러로 수백 개의 스프라이트를 렌더링할 수 있습니다. 렌더링할 스프라이트가 많지만 정렬할 필요는 없는 경우, Tilemap Chunk Mode를 사용하여 CPU 및 메모리 사용량을 줄일 수 있는데, 이는 저성능 기기를 타겟팅할 때 효과적입니다. 이 모드를 사용하려면 모든 정적 타일을 동일한 타일맵에 두고 Chunk Mode를 활성화합니다.

모든 타일이 동일한 스프라이트 아틀라스에 있는지 확인하세요. 씬 뷰에서는 타일이 제대로 표시되지 않을 수 있지만 플레이 모드로 진입하면 올바르게 정렬된 모습을 확인할 수 있습니다. Individual Mode를 사용하여 레벨을 디자인하고 퍼블리시할 준비가 되면 Chunk로 변경하는 방법도 있습니다.

캐릭터를 각 타일의 앞뒤로 움직이게 만드는 등의 이유로 스프라이트를 제대로 정렬해야 한다면 Individual Mode를 사용하고, 움직이거나 게임플레이 기능이 있어야 하는 스프라이트에는 Regular Mode를 사용하세요.

성능 향상을 위한 스프라이트 셰이프 베이크

스프라이트 셰이프는 유기적인 셰이프와 레벨을 디자인하는 2D 도구입니다. 기본적으로 Sprite Shape API를 사용하면 런타임에 스플라인 노드를 변경할 수 있으며 이는 성능에 영향을 미칠 수 있습니다. 런타임에 노드를 변경할 필요가 없다면 스플라인의 지오메트리를 베이크하거나 캐시하여 성능을 향상할 수 있습니다. 스프라이트 셰이프 컨트롤러를 선택하고 Edit Spline과 Cache Geometry를 차례로 활성화하여 메시를 베이크하세요. Unity 2019 LTS 또는 이후 버전을 사용하고 런타임에 스플라인을 변경하고 있다면 버스트 패키지를 설치하여 성능을 크게 향상할 수 있습니다. 패키지 관리자로 이동한 다음 Burst 버전 1.3 이상을 설치하세요.

스프라이트 셰이프로 더 빨라진 아트 작업

스프라이트 셰이프 프로필을 사용하면 벡터 드로잉 소프트웨어를 사용하듯 환경을 디자인할 수 있습니다. 이 프로필은 게임플레이와 데코레이션 요소에 모두 사용할 수 있습니다. 또한 다양한 아트 스타일을 만들 수 있고 넓은 영역을 빠르게 채우면서도 실제 사용하는 에셋의 양은 줄여줍니다. 

9슬라이싱 스프라이트와 스프라이트 타일링 사용

스프라이트 렌더러의 Draw Mode를 활용하면 에셋의 크기를 줄이고 레벨 디자인 과정을 더 즐겁게 진행할 수 있습니다. 타일러블 스프라이트(Tileable Sprites)를 사용하면 동일한 스프라이트를 다양한 크기로 활용하여 여러 게임 오브젝트를 만들 수 있습니다. 스프라이트 에디터에서 노란색 핸들을 움직여 스프라이트에서 타일화하려는 부분에 프레임을 적용해 보세요. 적용을 완료한 다음 게임 오브젝트로 이동하여 스프라이트 렌더러의 Draw Mode를 Tiled로 변경합니다.

확대, 축소, 배열 시에 비율에 맞추어 또렷한 형태를 유지하는 블록을 사용하는 9슬라이싱 스프라이트로 레벨을 디자인할 수도 있습니다. 스프라이트 에디터에서 타일화하려는 영역을 선택한 다음, 반복되지 않는 코너 영역에 모서리가 맞는지 확인한 후 게임 오브젝트에서 스프라이트 렌더러의 Draw Mode를 Sliced로 선택합니다.

Transparency Sort Mode 사용

2D 게임을 디자인할 때 일부 게임 오브젝트의 정렬 레이어와 렌더 순서가 동일한 경우가 있습니다. 움직이는 스프라이트에 여러 레이어와 로직을 만들어 올바른 순서로 보여줄 수도 있지만 효율적인 방법은 아닙니다. 프로젝트 설정의 Transparency Sort Mode를 사용하면 스프라이트를 렌더링하는 올바른 순서를 지정할 수 있습니다. Unity는 X축과 Y축으로 정의되는 Vector2의 방향에 따라 순서대로 스프라이트를 정렬합니다. Unite Now 세션에서 유니티의 프로덕트 마케팅 매니저 에두아르도 오리즈와 프로덕트 매니저 러스 스캐멜이  이 부분을 최적화하는 방법을 설명합니다. 영상의 9:15 지점을 확인해보세요.

2D 애니메이션 시작하기

Unity에서는 프레임 바이 프레임(frame-by-frame) 애니메이션을 간단하게 만들 수 있습니다. 프로젝트 창에서 스프라이트 시퀀스를 선택하고 씬 뷰 또는 계층 창으로 드래그하면 애니메이션 클립과 애니메이터가 자동으로 만들어집니다.

기존 애니메이터에 애니메이션 클립을 추가하고 싶다면 애니메이션 프레임을 애니메이터의 게임 오브젝트로 드래그하기만 하면 클립이 애니메이터에 추가됩니다. 스프라이트별로 게임 오브젝트를 만들려면 Alt 또는 Option 키를 누른 상태로 애니메이션 프레임을 계층 구조로 드래그하세요.

프레임 바이 프레임 애니메이션과 뼈대 기반 애니메이션

Unity는 프레임 바이 프레임 애니메이션과 뼈대 기반(bone-based) 애니메이션을 모두 지원합니다. 이 두 가지 접근법의 주된 차이점은 다음과 같습니다.  

프레임 바이 프레임 애니메이션

  • 프레임마다 고유한 스프라이트를 사용
  • 애니메이션 클립 추가 시 추가 스프라이트 필요
  • 일정한 프레임 속도
  • 전환 애니메이션에 추가 스프라이트 필요
  • 2D 역운동학(2D IK)을 지원하지 않음

뼈대 기반 애니메이션

  • 각 애니메이션 프레임에 동일한 스프라이트 사용
  • 각 애니메이션 클립에 동일한 스프라이트 사용
  • 애니메이션 속도 변화에도 원활한 대응
  • 애니메이션 시스템에서 클립에 전환 효과를 줄 수 있음
  • 2D IK를 지원함

버스트로 2D 애니메이션 성능 높이기

뼈대 수가 많은 2D 애니메이션의 성능과 버텍스 수가 많은 스프라이트 메시를 최적화하려면 Burst/Collections 패키지를 설치해 보세요. 런타임 시 애니메이션화된 스프라이트 변형 성능도 향상됩니다. 2D Animation 패키지는 버스트 컴파일과 로우 레벨 배열 유틸리티를 사용하여 Unity에서 스프라이트 메시 변형을 처리하는 속도를 높입니다.

Unity 2020.2와 2D Animation 5.0.x를 사용해야 하며, Burst 패키지 1.3.3 이상을 설치할 경우 프리뷰 패키지인 Collections도 설치해야 합니다.

Burst 1.3.3과 Collections 0.9.0-preview.6은 2D 애니메이션 패키지에서 테스트 완료된 버전입니다.

2D 애니메이션에 커스텀 테셀레이션 사용

리깅에 필요한 스프라이트를 준비할 때 메시를 완전히 제어할 수 있습니다. 빠른 시작을 위해 Skinning Editor에서는 자동 테셀레이션 옵션을 제공합니다. 하지만 메시 툴로 버텍스를 추가하고 제거하여 필요한 메시를 만드는 방식으로 테셀레이션을 커스터마이즈할 수 있습니다.

2D 애니메이션과 2D 물리 사용

2D 물리 시스템을 통해 모션을 구현하려면 2D 콜라이더와 리지드바디 2D 컴포넌트를 뼈대 기반 캐릭터에 추가하세요. 에두아르도와 러스의 세션에서 살펴본 위의 예시 이미지에서는 캡슐 콜라이더가 각 뼈대와 리지드바디 2D 컴포넌트에 추가된 다음, 힌지 조인트와 연결되었습니다. 각 조인트의 각도 제한을 사용하여 모션의 범위를 제한할 수 있으며 조인트를 통해 연결된 리지드바디 컴포넌트가 서로 충돌하는지 여부도 토글로 조정할 수 있습니다. 

픽셀 아트의 정교함 유지하기

모든 에셋에서 일정한 픽셀 밀도를 유지하세요. 예를 들어, 프로젝트의 PPU가 32라면 위 이미지의 왼쪽에 있는 타일처럼 한 단위에 32픽셀이 있을 것이라고 예상할 수 있습니다.

기본 2D 카메라는 카메라 중앙을 기준으로 수직 단위로 크기를 표현합니다. 여기에 있는 예시 이미지에서는 수직으로 10개의 타일을 끼울 수 있습니다.

씬 뷰에 에셋을 추가했을 때 원본 레퍼런스 이미지에 비해 에셋이 너무 작게 표시된다면 해상도의 불일치 때문일 가능성이 가장 높습니다.

Unity의 기본 스프라이트 PPU는 100으로 설정되어 있습니다. 스프라이트 에셋 설정을 프로젝트에서 사용하는 32 PPU로 변경하면 올바른 스프라이트 크기가 됩니다.

쌍선형 필터링(Bilinear Filtering)이 에셋에 기본적으로 활성화되어 있어 테두리를 부드럽게 만들어주지만, 레트로풍의 픽셀화된 모습을 원할 경우 Filter Mode를 Point로 변경하여 시작 시에 정의된 스크린 공간에 픽셀화된 비주얼이 표시되도록 할 수 있습니다. 

일관된 텍스처 임포트 설정을 위한 프리셋

프로젝트로 임포트할 에셋이 많은 경우, 개별 스프라이트의 설정을 프로젝트 설정과 일치하도록 변경하는 데 오랜 시간이 소요됩니다. 대신 임포트한 모든 에셋에 원하는 사전 정의된 설정이 사용되도록 임포트 템플릿 또는 프리셋을 만들어 보세요. 다음 단계에 따라 만들 수 있습니다.

  1. 원하는 설정이 있는 에셋을 선택합니다.
  2. 스프라이트 에셋 옆에 있는 설정 아이콘을 클릭하여 템플릿을 만듭니다.
  3. 기억하기 쉬운 이름으로 템플릿을 저장합니다.
  4. 새로 임포트하는 모든 에셋에 해당 설정이 적용되도록 기본값으로 설정합니다(프로젝트 뷰에 프리셋 에셋이 표시됨).

픽셀 아트를 작업하고 있다면 화면에 항상 동일한 수의 픽셀이 표시되고 모든 픽셀이 동일한 크기로 유지되는지 확인하세요. 먼저 Camera로 이동해서 Pixel Perfect Camera를 추가합니다. Assets PPU를 픽셀 아트에서 사용하는 수치로 설정합니다.

Pixel Perfect Camera 컴포넌트를 추가하면 플레이 모드에서 카메라를 제어하며 Run in Edit Mode를 활성화하면 에디터에서도 변경사항을 확인할 수 있습니다.

프로젝트에서 캐릭터와 오브젝트의 위치와 회전 또는 크기를 변경할 수 있습니다. 기본적으로 부드러운 보간이 적용되어 있지만 프로젝트의 PPU에 따른 픽셀 아트 느낌에 충실하고 싶다면 Upscale Texture를 활성화하세요. 게임 오브젝트가 1 픽셀 단위로 움직이며 회전 및 확대/축소 변경 사항도 시각적 제약을 따르게 됩니다. 레트로 8비트 및 16비트 게임을 만드는 팁에 관해 자세히 알아보세요. 

2D 에디터에서 생산성 유지하기

정렬 그룹(Sorting Group): 정렬 그룹을 통해 2D 렌더러를 그룹화할 수 있습니다. Sorting Layer와 Order in Layer를 사용하여 각 캐릭터의 렌더링 순서를 올바르게 유지할 수 있지만, 개별 파트가 서로 겹쳐있는 경우 제대로 동작하지 않게 됩니다. 

각 캐릭터의 루트 게임 오브젝트에 Sorting Group 컴포넌트를 배치하면 렌더러를 하나로 그룹화하여 정렬할 수 있습니다. 정렬 그룹을 사용하면 캐릭터가 더 이상 서로 얽히지 않으며 그룹으로 정렬됩니다. 정렬 그룹은 모든 2D 렌더러 및 파티클 시스템과 호환됩니다.

스프라이트 아틀라스(Sprite Atlas): 이 에셋은 다양한 스프라이트를 하나의 텍스처로 결합합니다. Unity에서는 이 단일 텍스처를 사용하여 하나의 폴더에 담긴 각 스프라이트에 대해 여러 드로우 콜을 호출하는 대신 하나의 드로우 콜만 호출하여 성능을 향상할 수 있습니다.

폴더를 스프라이트 아틀라스에 추가할 경우, 패키징된 폴더의 콘텐츠를 변경하기만 하면 프로덕션 과정 전반에 걸쳐 스프라이트 아틀라스에서 스프라이트를 자유롭게 추가하고 제거할 수 있습니다.

또한 다양한 크기나 압축 설정으로 스프라이트 아틀라스의 세부 모델을 만들어서 동일한 소스 에셋으로 여러 플랫폼을 타겟팅하는 것도 가능합니다.

현재 개발 중인 게임에 적합한 아틀라싱 전략을 고려하시기 바랍니다. 스프라이트 아틀라스는 생산성과 유연성, 성능을 골고루 달성하도록 하기 위해 만들어졌습니다.

이외 2D 게임 개발에 관한 유용한 팁

유니티의 2D 아티스트 지원 툴을 확인해 보세요. Odd Bug 스튜디오에서 2D 광원을 활용하여 Tails of Iron의 분위기를 조성한 비결을 알아보고, 2D 샘플 프로젝트인 로스트 크립트도 다운로드하여 사용해보세요. 2D 에셋에 알맞은 최적의 해상도를 선택하는 방법에 관해서는 이 심화 가이드를 참고하시면 됩니다. 에두아르도와 러스의 Unite Now 세션은 아래에서 시청할 수 있습니다.

12 replies on “2D 게임 개발에 활용하면 좋은 유용한 팁”

Thanks for this absolutely awesome guide.
Just out of curiousity, is there any cases for 2d development (special lighting need etc..) where the URP would be a better starting template than the 2d one? For instance it seems like the 2d pixellights pixelbod demo scene uses URP.

Hi Lars. As long as you get URP for the Unity version that you are using and set up the 2D renderer there should be no difference, the benefit of using the 2D template is that you will already have the 2D packages ready to use and settings optimal for working with 2D (as described at the beginning of this blog). This blog and presentation is focused on workflows more than graphics, but if you are interested in trying a 2D project with URP/2D renderer I would recommend getting our latest 2D demo, Dragon Crashers: http://u3d.as/2pA6

The points made throughout this article include some fairly useful insights, especially for someone who is interested in learning more about making games and is just getting started. And the inclusion of a YouTube channel is another excellent resource. Thank you for putting the time into publishing this material.

When I complained about the lack of good content on the blog, the lack of stuff like this was a huge part of why. This is an absolutely fantastic resource and one I’m going to be able to direct a lot of people starting out doing 2D in Unity towards

Great post!

Thanks for this!

I’m particularly interested in how 2d lighting features work in Unity and will be checking out your Odd Bug link.

However, the Lost Crypt sample project, run in the latest version in Unity, imports with dozens of compiler errors that I can’t even begin to untangle. It’s all sorts of broken and I have tried searching for a solution to no avail. Disappointing because it looks amazing and I want to understand how it works.

Hi Sarah! Thank you for your feedback. I am taking a look at the Lost Crypt sample project now and making sure that it works with 2019.4, 2020.1 and 2020.2. I’ll post again when it’s been updated. Thank you for your patience.

We’ve updated the Lost Crypt sample project on the Asset Store. It’s tested to work on 2019.4, 2020.1 and 2020.2. Do try it again and let us know if it works for you.

Great in-depth content from the Unity Team!
Thank you so much for sharing such informative resources, developers like us really need such well-defined tips and tricks to boost up and polish the game dev skills.

We would love to read next about Tips and tricks for 3D Mobile Game Development.

Comments are closed.