무엇을 찾고 계신가요?
Hero background image

Unity 타일맵을 통한 2D 게임 성능 최적화

Unity 타일맵을 사용하여 2D 게임 및 모바일 앱의 성능을 향상시키는 팁을 얻으세요. 여기에서 다루는 주제에는 씬 크기, 직렬화, 렌더러 오버헤드 및 배칭이 포함됩니다.
이 웹페이지는 이해를 돕기 위해 기계 번역으로 제공됩니다. 기계 번역으로 제공되는 콘텐츠에 대한 정확도나 신뢰도는 보장되지 않습니다. 번역된 콘텐츠의 정확도에 관해 의문이 있는 경우 웹페이지의 공식 영어 원문을 참고해 주시기 바랍니다.

이 팁은 Unity의 2D 도구 세트에 대한 사전 경험이 있는 사용자에게 가장 유용합니다. 상업용 2D 게임을 Unity로 개발하는 전문 제작자를 위한 또 다른 훌륭한 자료는 우리의 전자책 2D 게임 아트, 조명 및 애니메이션입니다.

Unity로 2D 게임 개발이 처음이라면 신규 사용자를 위한 2D 가이드부터 시작하세요.

Unity 에디터의 스크린샷
UNITY 2D 프로젝트 LOST CRYPT의 이미지

일반 성능 팁

고려해야 할 몇 가지 일반 성능 팁은 다음과 같습니다:

  • 처음부터 자산(데이터)의 성능에 대해 생각하세요. 이 요소들이 비효율적이라면, 나중에 코드를 최적화할 수 있는 방법이 거의 없습니다.
  • 가장 낮은 사양의 타겟 장치에서 프로필을 작성하세요. 프로젝트 개발 전반에 걸쳐 Unity Profiler를 사용하고, iOS 장치의 경우 Xcode와 같은 플랫폼별 프로파일링 도구를 함께 사용하세요.
  • 가장 낮은 사양의 타겟 장치에서 사용 가능한 RAM의 3분의 1 이상을 사용하지 마세요. 이렇게 하면 저렴한 안드로이드폰이 모바일 시장에서 가장 인기 있는 기기인 다양한 모바일 장치에서 콘텐츠가 원활하게 실행됩니다.

2D 최적화 팁에 대한 더 많은 정보는 다음 리소스를 참조하세요:

Unity-타일맵을 통해 2D 레벨을 빠르게 생성
타일맵 예제

타일맵에 대한 간략한 소개

타일맵 구성 요소를 사용하면 그리드 오버레이에서 타일을 사용하여 2D 레벨을 효율적으로 생성할 수 있습니다. 여기에는 다음과 같은 여러 요소가 포함됩니다:

스프라이트와 게임 오브젝트의 조합을 사용하여 2D 레벨을 생성하고, 정렬 레이어, 타일맵 콜라이더 및 애니메이션 타일과 같은 속성을 제어할 수 있습니다. 사각형, 육각형, 및 아이소메트릭 스프라이트를 그릴 수도 있습니다.

타일맵으로 레벨을 그려서 타일맵 게임 오브젝트에 적용할 때 타일의 콜라이더 유형 설정에 따라 타일 주위에 콜라이더를 자동 생성하는 타일맵 콜라이더 2D 구성 요소를 사용할 수 있습니다.

타일맵을 사용하여 스프라이트로 구축된 장면과 비교할 때 얻는 성능 향상을 살펴보겠습니다.

오브젝트 수가 적은 타일맵
UNITY 2D 데모 DRAGON CRASHERS의 타일맵

게임 오브젝트 수 줄이기

타일맵을 사용하면 로드 시간과 메모리 및 CPU 사용량이 줄어듭니다.

이전에 2D 게임과 앱을 개발한 적이 있다면, 게임에 많은 수의 스프라이트가 존재할 수 있다는 것을 알고 있을 것입니다. 이 모든 스프라이트는 별도의 게임 오브젝트로 존재합니다. 각 스프라이트 게임 오브젝트에는 메모리를 차지하는 Transform과 Renderer를 포함한 구성 요소가 있습니다. Collider와 같은 다른 구성 요소는 CPU 오버헤드를 동반합니다.

반면, 타일맵은 전체 맵과 모든 타일에 대해 하나의 Renderer를 사용합니다. 이로 인해 여러 메모리 구조를 갖는 것에 비해 오버헤드가 줄어듭니다.

게임 오브젝트가 적으면 더 깔끔한 계층 구조가 형성되어, 필요한 것을 찾기 위해 복잡한 목록을 스크롤할 필요가 없습니다.

Unity-타일맵을 통해 씬 크기 축소
스프라이트(왼쪽)로 생성된 파일과 타일맵(오른쪽)으로 생성된 파일의 비교

씬 크기 감소

Unity 타일맵은 씬 크기를 줄입니다. 게임 오브젝트와 구성 요소가 적으면 디스크에서 로드하고 역직렬화하며 런타임에 메모리에 유지해야 할 객체가 줄어듭니다.

Unity에서 씬을 로드하는 것은 두 단계로 이루어집니다: 먼저, 데이터가 디스크에서 읽혀집니다. 이 과정은 특히 Android 장치에서 게임에서 가장 많은 시간을 소모하는 과정입니다. 그 다음 데이터가 역직렬화됩니다. 역직렬화는 데이터를 한 형식에서 다른 형식으로 변환하는 과정입니다. 본질적으로, 저장된 상태에서 데이터와 객체를 복원합니다. Unity는 내부적으로 직렬화를 수행하여, 씬 파일을 에디터와 런타임에서 로드할 때 저장된 파일을 Unity 객체로 변환합니다.

위 이미지에서는 타일맵을 사용하는 직렬화된 씬 파일과 스프라이트를 사용하여 재생성된 씬 파일 간의 비교를 볼 수 있습니다. 이 장면은 Robbie Swifthand 게임의 Pixel Reign에 감사드립니다.

오른쪽에는 네 개의 타일로 구성된 직렬화된 타일맵의 섹션이 있습니다. 사용된 타일의 유형을 포함한 모든 타일의 규칙은 타일맵의 상단에 설정되어 있습니다. 각 타일은 사용된 타일과 그 위치와 같은 속성을 명시합니다.

왼쪽에는 트랜스폼과 스프라이트 렌더러 컴포넌트가 있는 하나의 스프라이트가 있습니다.

이 비교를 통해 스프라이트 직렬화가 얼마나 많은 작업을 해야 하는지 분명해집니다. 특히, 스프라이트를 사용하는 씬은 파일에 370,000줄이 있는 반면, 타일맵이 있는 씬은 30,000줄입니다. 더 작은 프로젝트와 저장소 크기는 더 빠른 반복 시간과 더 원활한 작업 흐름을 가져옵니다.

자신의 씬을 텍스트 파일로 보려면 에디터 설정으로 가서 에셋 직렬화 모드를 켜고 Force Text를 클릭한 다음 .unity 씬 파일텍스트 편집기에서 엽니다.

Unity-타일맵을 통해 콜라이더 수 감소
타일맵 콜라이더 2D와 복합 콜라이더 2D 결합

콜라이더 수 줄이기

타일맵 콜라이더 2D를 복합 콜라이더와 결합할 수 있습니다. 이렇게 하면 콜라이더와 스프라이트의 수가 줄어들 뿐만 아니라, 변경할 때마다 복잡한 충돌 형태를 다시 구축할 필요가 없기 때문에 생산성이 향상됩니다. 복합 콜라이더가 이를 처리합니다.

타일맵 사용 사례
스프라이트 렌더러가 있는 개별 게임 오브젝트와 타일맵의 사용 사례

렌더링 오버헤드 감소

앞서 언급했듯이, 각 스프라이트에는 스프라이트 렌더러 컴포넌트가 있으며, 더 많은 렌더러가 필요하면 CPU의 작업이 더 많아지고, 렌더링을 위한 쿨링 준비 및 정리 시간도 포함됩니다. 타일맵을 사용하면 렌더러 컴포넌트가 줄어들어 CPU의 작업을 절약할 수 있습니다.

컬링 비용 감소

씬에 카메라가 하나 이상 있으면 렌더러가 더 많아집니다. 이로 인해 쿨링 비용이 증가합니다.

카메라 뷰에서는 렌더러당, 카메라당 쿨링 비용이 발생합니다. 모든 카메라는 씬의 모든 렌더러 컴포넌트에 대해 쿨링 검사를 수행해야 하므로, 게임에 다중 카메라 설정이 있는 경우 타일맵을 사용하면 해당 비용을 줄이는 데 도움이 됩니다.

배치 콜 감소
프레임 디버거

배치 콜 감소

배칭은 다른 SetPass 호출을 하지 않고 그릴 수 있는 모든 기하학을 모으는 것입니다. 타일맵 렌더러는 스프라이트의 위치에 따라 기하학을 배칭합니다. 결과적으로 타일맵 렌더러는 스프라이트 렌더러에 비해 더 적은 메시와 더 많은 기하학을 렌더 파이프라인에 보냅니다. 다음 섹션의 표에서 볼 수 있듯이, 타일맵 기반 장면은 배칭이 훨씬 적습니다.

게임 뷰의 통계 패널을 확인하여 배칭을 확인할 수 있습니다. 아이템이 배칭되지 않는 이유를 확인하기 위해 프레임 디버거를 사용할 수도 있습니다.

스프라이트 및 타일맵을 사용하는 장면 표

더 빠른 프레임 속도

60 fps에 도달하려면 각 프레임이 최대 16ms를 렌더링하는 데 걸릴 수 있습니다. 샘플 장면이 오래된 아이폰 7에서 프로파일링되었을 때, 스프라이트 기반 버전은 프레임당 244ms였고, 타일맵 버전은 프레임당 13ms였습니다.

마지막으로, 스프라이트 기반 장면의 RAM 사용량은 1.1GB로, 예를 들어 저사양 안드로이드 폰에는 너무 많습니다. 타일맵 기반 장면은 21MB의 RAM만 사용하여 더 넓은 범위의 모바일 장치에서 실행하기에 적합합니다.

위의 비교는 두 장면 간의 성능 차이를 명확하게 보여줍니다.

스프라이트 아틀라스 데모
드래곤 크래셔에서 스프라이트 아틀라스 사용

스프라이트 아틀라스로 스프라이트 패킹

스프라이트 아틀라스는 메모리 사용량과 드로우 호출을 최적화하기 위해 텍스처에 스프라이트를 패킹할 수 있는 에디터 도구입니다. 타일맵에서 사용되는 모든 스프라이트를 포함하는 스프라이트 아틀라스 자산을 생성하여 타일맵 렌더러가 단일 드로우 호출로 배칭할 수 있도록 합니다(모든 스프라이트가 단일 텍스처에 맞는 한).

2D 게임 제작자를 위한 더 많은 자료

2D 기술 향상: 우리 블로그 읽기 목록은 2D 게임 개발을 위한 유용한 팁을 제공합니다.

아티스트를 위한 2D 게임 아트, 애니메이션 및 조명: 이 무료 전자책은 Unity의 2D 도구 세트를 최대한 활용하기 위한 모범 사례를 제공합니다.

2D 도구 개요: Unity가 2D 개발자에게 제공하는 내용을 간편하게 살펴보세요.

타일맵을 이용한 절차적 패턴 – 1부2부: 절차적 생성을 통해 게임에 다양성을 추가하세요. 이 게시물에서는 타일맵과 룰타일과 함께 사용할 수 있는 알고리즘을 설명합니다.

Unity 타일맵을 통한 2D 게임 성능 최적화