이 가이드에서는 일반적인 게임 개발 주기를 간략히 설명합니다. 이 가이드를 읽은 후 참조용으로도 사용하는 것이 좋습니다.
Unity로 작업할 때 개발 수명 주기는 다음 세 단계로 구성됩니다.
- 계획 및 설계
- 개발 및 테스트
- 게시 및 유지관리
계획 및 설계
계획 및 설계 단계에서는 게임을 빌드하는 방법을 결정합니다. 모바일 개발의 문제를 해결하는 방법을 결정하고 개발에 사용할 도구와 프로세스를 식별합니다.
모든 팀원의 의견 받기
아트, 엔지니어링, 디자인, 오디오, 제작팀과 협력하여 구현 작업을 식별하고 기록합니다. 예를 들면 다음과 같습니다.
- 아트팀은 캐릭터와 환경에 대한 애셋 텍스처 및 메시 예산을 만들 수 있습니다.
- 엔지니어링팀은 각 플랫폼에 대해 프로파일링할 메모리 및 성능 체크포인트를 결정할 수 있습니다.
- 디자인에서는 환경을 지원하는 게임 메커니즘을 계획할 수 있습니다.
- 오디오 전문가는 UI, 2D, 3D 공간 사운드 간 사운드 연속성 요구사항을 검토할 수 있습니다.
- 프로덕션팀은 출시 요구사항을 전달하고 팀이 일관된 방향으로 진행할 수 있도록 지원합니다.
모바일용 디자인
모바일 플랫폼용 애플리케이션 개발에는 다음과 같은 특정 고려사항이 적용됩니다.
- 가변 화면 가로세로 비율
- 전력 소모량
- 열 및 프로세서 제한
- 터치 입력
- 크로스 플랫폼 개발
- 그래픽 API (Vulkan 또는 OpenGL ES)
모바일용 디자인에만 적용되는 고려사항에 관한 자세한 내용은 Unity의 Unity의 Android 개발 및 Google Play 아카데미를 참고하세요.
개발 및 테스트
개발 및 테스트 단계에서는 게임을 빌드하고 테스트와 출시 전 준비를 합니다. Google Play에서 제한적인 내부 테스트를 진행하여 출시 요구사항을 충족할 수 있도록 준비합니다. Play Asset Delivery 및 Unity Addressables 시스템을 기반으로 Unity에서 배포 전략을 개선하고 애셋을 정리합니다.
다음 섹션에서는 Android용 개발에 도움이 되도록 설계된 Unity 도구와 기법을 설명합니다.
렌더링
렌더링은 Unity 장면의 3D 및 2D 애셋을 화면에 그리는 프로세스입니다. Unity 엔진에서 렌더링을 처리하지만 Android 플랫폼에서는 몇 가지 요소를 고려해야 합니다.
텍스처
타겟 기기에 따라 가장 큰 텍스처 크기가 필요한지 확인합니다. 메모리 할당을 프로파일링할 때 타겟 텍스처 크기를 변경하여 절약할 수 있는 잠재적 금액을 검토합니다.
프레임 시간
Android 기기에서 과열을 방지하려면 평균 타겟 프레임 시간 값을 21밀리초 미만으로 설정하세요. 로딩이나 짧은 시네마틱 환경과 같은 경우에는 프레임 시간이 21밀리초를 초과할 수 있지만 핵심 게임 환경에서는 21밀리초 기준점을 넘지 않아야 합니다.
모바일 플랫폼에서 강제 VSync는 최소 타겟에 도달하지 못하면 프레임 속도를 제한합니다. 예를 들어 60Hz 화면 업데이트에서 60fps에 도달하지 못하면 게임이 30으로 제한되고 30에 도달하지 못하면 15로 제한됩니다.
많은 Android 기기가 60Hz 및 120Hz의 디스플레이 새로고침 빈도로 제공됩니다. 높은 렌더링 속도에서 열 제한 및 배터리 소모 위험 없이 훨씬 작은 프레임 시간 (60Hz 업데이트의 경우 10ms 타겟, 120Hz의 경우 5ms)을 타겟팅하는 이점을 고려하세요.
Unity에서 게임의 특정 프레임 속도를 설정하려면 Application.targetFrameRate를 사용하세요.
Android Frame Pacing 라이브러리는 애플리케이션이 화면 새로고침 빈도보다 다음 프레임을 표시하는 데 더 오래 걸릴 때 원활하게 렌더링하는 데 도움이 됩니다. Unity 버전 2021 이상의 경우 Android 프레임 속도를 사용 설정하면 디스플레이 화면 재생 빈도가 타겟 프레임 속도에 가장 적합한 값으로 설정됩니다. 이렇게 하면 게임에서 불필요한 디스플레이 업데이트에 배터리 전원을 낭비하지 않습니다.
라이브러리를 사용 설정하려면 Project Settings(프로젝트 설정) > Player(플레이어)의 Settings for Android(Android용 설정)에서 Optimized Frame Pacing(최적화된 프레임 속도) 체크박스를 선택합니다.

Vulkan API
Vulkan은 OpenGL ES에 비해 오버헤드가 낮은 크로스 플랫폼 고성능 3D 그래픽 API입니다. Unity는 두 가지 다른 방식으로 Vulkan을 사용할 수 있습니다.
Auto Graphics API
Vulkan과 함께 Auto Graphics API를 사용할 수 있지만 설치된 Unity 버전에 따라 동작이 다를 수 있습니다. Project Settings(프로젝트 설정) > Player(플레이어) > Rendering(렌더링)으로 이동하여 이를 선택할 수 있습니다.
사용할 Unity 버전을 선택할 때 다음 사항을 고려하세요.
- Unity 2021.1 이하 버전은 자동 그래픽 API를 사용하는 Vulkan을 지원하지 않습니다. Unity는 OpenGL ES 3.2를 사용하려고 합니다. 기기에서 OpenGL ES 3.2를 지원하지 않으면 Unity는 OpenGL ES 3.1, 3.0 또는 2.0으로 대체됩니다(이 순서대로).
- Unity 2021.2 이상 버전에서는 Vulkan을 먼저 사용합니다. 기기에서 Vulkan을 지원하지 않으면 Unity는 OpenGL ES 3.2, 3.1, 3.0 또는 2.0으로 대체됩니다.

수동 그래픽 API
또는 자동 그래픽 API를 사용 중지하여 Vulkan을 수동으로 사용 설정할 수 있습니다. Unity 2021.1 또는 이전 버전을 사용하는 경우 Vulkan을 사용할 수 있는 유일한 방법입니다.
이 목록에서 Vulkan이 OpenGL ES보다 순위가 높으면 Unity는 먼저 Vulkan을 사용하려고 시도합니다. 기기에서 Vulkan을 지원하지 않으면 Unity는 OpenGL ES로 실행됩니다. 최신 그래픽 API를 사용하고 게임의 성능을 최적화하는 방법 등 Android의 Vulkan에 관한 자세한 내용은 Vulkan 시작하기를 참고하세요.

그리기 호출
화면에 표시되는 모든 항목은 하나 이상의 그리기 호출과 연결됩니다. 모바일 플랫폼에서는 그래픽 처리 장치 (GPU)로 전송하는 그리기 호출 수를 최적화하고 줄여야 합니다.
그리기 호출은 신호등에 줄지어 있는 자동차와 비슷하다고 생각하면 됩니다. 신호등이 녹색으로 바뀐 후 신호등이 바뀌기 전에 일정 수의 자동차가 통과할 수 있습니다. 조명이 노란색으로 바뀌면 이상적인 타겟 프레임 시간 (21밀리초)에 도달한 것이고, 조명이 빨간색으로 바뀌면 33밀리초 프레임 시간 제한에 도달한 것입니다. 이 시간을 초과하면 다음 렌더링 프레임에 영향을 미치므로 결과 프레임 속도가 타겟 30fps보다 낮아집니다.
게임에서 드로우 호출 성능을 개선하는 방법에 관한 자세한 내용은 Unity 지원의 배칭 도움말을 참고하세요.
그림자
그림자 드리우기 드로우 호출은 GPU를 가장 많이 사용하며 간단한 환경에서도 GPU 시간을 가장 많이 소비할 수 있습니다. 그림자 캐스팅 드로우 호출의 비용을 줄이려면 부드러운 그림자 대신 딱딱한 그림자를 사용해 보세요. 저가형 기기에서 GPU의 비용이 여전히 너무 높은 경우 하드 그림자 대신 블롭 그림자를 사용하는 것이 좋습니다.
텍스처
Android에서 RGB 및 RGBA 텍스처에 권장되는 텍스처 압축 형식은 ASTC입니다. Unity에서 Android에 사용해야 하는 최소 텍스처 압축 옵션은 ETC2입니다. Unity 빌드 설정에서 ASTC의 백업으로 ETC2를 사용할 수 있습니다.
플랫폼별 지원되는 형식의 전체 목록은 Unity 문서의 매뉴얼: 플랫폼별 권장, 기본, 지원되는 텍스처 형식을 참고하세요.
사용자 인터페이스 및 화면 비율
Unity 기기 시뮬레이터 도구를 사용하여 Unity 편집기에서 다양한 기기 화면 해상도, 방향, 가로세로 비율을 직접 미리 볼 수 있습니다. 게임 뷰와 기기 시뮬레이터 뷰 간에 전환할 수 있습니다.
Unity의 기기 시뮬레이터로 게임 시뮬레이션하기에서 도구 미리보기를 확인하세요.

Trivial Kart 소스 코드는 GitHub의 games-samples 저장소에서 찾을 수 있습니다.
드롭다운 메뉴에서 기기 옵션을 선택하여 기기 시뮬레이터 뷰에서 UI 캔버스 요소의 레이아웃과 정확성을 빠르게 확인할 수 있습니다.


Unity의 UI 최적화 기법에 관한 자세한 내용은 Unity의 Unity UI 최적화 튜토리얼을 참고하세요.
물리학
Nvidia PhysX 엔진은 Unity에 내장되어 있습니다. 기본 설정은 모바일에서 비용이 많이 들 수 있으므로 다음 고려사항에 유의하세요.
- 타겟 프레임 속도를 고려하여 고정된 타임스텝을 설정합니다. 기본값은 0.02ms 또는 50Hz로 설정됩니다. 30fps 타겟의 경우 0.03 이상으로 늘릴 수 있습니다.
- 메시 콜라이더를 단순화하고 특정 레이어 유형의 게임 오브젝트 간 상호작용을 결정하기 위한 레이어 충돌 매트릭스를 최소화하는 것이 좋습니다.
물리 설정 및 모바일 게임 최적화에 관한 자세한 내용은 Unity의 모바일 게임 최적화 eBook을 참고하세요.
프로필
앱 개발자는 애플리케이션이 심각한 실패 지점에 도달할 때까지 프로파일링을 간과하거나 무시하는 경우가 많습니다. 프로세스에 전용 프로파일링 시간을 예약하고 다음 권장사항을 사용하는 것이 좋습니다.
- 무작위로 프로파일링 시간을 할당하는 대신 개발 중에 프로파일링 시간을 할당할 수 있는 주요 지점을 파악합니다.
- Unity 프로필 분석기와 함께 사용할 프로필 스냅샷을 저장합니다.
- 타겟 기기에서 게임을 프로파일링하여 현재 개발 단계에서 게임이 어떻게 실행되는지 정확하게 파악하세요.
- 게임의 여러 부분을 프로파일링합니다.
- 플레이어가 게임을 플레이하는 방식을 프로파일링합니다. (게임이 유휴 상태이거나 일시중지 화면에 있을 때만 프로파일링하지 마세요.)
- 게임이 한동안 실행된 후 지속 모드에서 프로파일링하여 휴대기기가 뜨거워질 때 발생할 수 있는 스로틀링 문제를 찾습니다.
다음 프로파일링 도구를 별도로 또는 조합하여 사용할 수 있습니다.
Unity Profiler Unity Profiler는 Unity Editor에서 코드에 대해 실행하고 개발 모드 빌드를 실행하는 독립형 Android 기기에 연결할 수 있는 완전 통합 성능 분석 도구입니다.
Android GPU 검사기 Android GPU 검사기(AGI)를 사용하면 프레임 수준 디버깅을 실행할 수 있습니다. AGI는 GPU, CPU, 메모리, 배터리, GPU 카운터를 비롯한 시스템 서비스도 분석합니다.
Unity에서 게임을 프로파일링하는 방법에 관한 자세한 내용은 Unity의 Introduction to profiling in Unity 동영상을 시청하거나 Ultimate guide to profiling Unity games를 참고하세요.
메모리 관리
Android 프로세스는 타겟 기기에서 사용 가능한 메모리를 공유합니다. 타겟 테스트 기기에 충분한 여유 메모리 리소스가 있을 때 메모리 사용량을 프로파일링해야 합니다. 세션과 메모리 사용량 추세를 적절하게 비교할 수 있도록 게임의 일관된 지점에서 메모리 테스트를 실행하세요.
C#으로 작성된 스크립트에서 작업할 때는 문자열, 문자열 비교, 문자열 관련 객체 (예: 게임 설정용 JSON 파일) 할당에 주의해야 합니다. 이러한 작업은 빈번한 메모리 할당을 생성하고 조각화에 기여할 수 있습니다.
문자열의 인플레이스 연결 (예: 'this' + 'is' + 'a' + 'bad' + 'idea'와 StringBuilder.Concat()
함수 호출 비교) 대신 문자열 조작의 큰 시퀀스에 StringBuilder 클래스를 사용하는 것이 좋습니다.
문자열에 관한 자세한 내용은 Unity 문서의 문자열 및 텍스트를 참고하세요.
선호하는 ScriptableObject
유형에 대해 TextAsset 및 JSON 텍스트 리소스를 평가합니다. ScriptableObjects
크로스 장면 데이터 스토리지를 효율적으로 처리하고 에디터에서 플레이 시간 수정이 가능하도록 합니다.
모바일 최적화를 위해 기본 JSON 핸들 대신 다른 핸들을 사용하는 방법에 관한 내용은 Hutch의 네트워크 게임의 숨겨진 최적화 도움말을 참고하세요.
Memory Advice API를 사용하여 런타임에 메모리 사용량이 어떤지 확인합니다. API는 높음, 보통, 낮음 메모리 사용량에 대한 신호등 표시기를 노출합니다. 업데이트를 위해 표시기를 구독하거나 현재 상태를 위해 직접 폴링할 수 있습니다. 빨간색 신호가 표시되면 게임 객체 풀이나 캐시를 줄이는 것이 좋습니다. 라이브 운영 중인 게임 원격 분석에 이 컨텍스트를 포함하고 출시 후 실적 측정항목을 검토하세요.
Android 기기의 메모리 구성과 Unity의 작동 방식에 대해 자세히 알아보려면 Android 메모리 사용량 이해 (Google I/O '18)를 시청하세요. 이 동영상에서는 메모리 문제의 유형과 메모리 부족 킬러가 적용되는 시점을 설명합니다.
가비지 컬렉션
관리 메모리 환경의 가비지 컬렉션은 애플리케이션에서 재활용할 수 있는 사용되지 않는 메모리 조각을 정리합니다. 가비지 컬렉션 권장사항을 따라 메모리 리소스의 불필요한 할당을 방지하세요.
예를 들어 주문형 할당 (GameObject.Instantiate
)을 사용하는 대신 게임 객체 풀을 만드세요. 대규모 풀의 경우 여러 프레임에 할당하여 엔트리급 Android 기기에서 게임이 응답하지 않을 위험을 줄이는 것이 좋습니다.
MonoBehaviour 시작 부분에서 호출되는 간단한 코루틴의 다음 코드 스니펫을 고려해 보세요.
// Option 1: Bad for memory management - causes allocation each iteration
IEnumerator UpdateEnemyTarget() {
while (enabled) {
yield return new WaitForSeconds(1.0f);
// Some intermittent function check
}
}
// Option 2: Better for memory management - allocation of yield instruction once, reused each iteration
private YieldInstruction waitForSecond = new WaitForSeconds(1.0f);
IEnumerator BetterUpdateEnemyTarget() {
while (enabled) {
yield return waitForSecond;
// Some other intermittent function
}
}
MonoBehaviour 템플릿 파일을 수정하여 기본 Start()
및 Update()
스텁 함수를 삭제하면 개발 중에 실수로 빈 함수를 남기지 않을 수 있습니다.
MonoBehaviour 이벤트 실행 순서에 대한 개요는 Unity 문서의 이벤트 함수 실행 순서를 참고하세요. 메모리 관리에 대해 자세히 알아보려면 Unity의 메모리 관리 과정을 참고하세요.
모바일 게임 성능 최적화 팁은 모바일 게임 성능 최적화: Unity 최고 엔지니어의 프로파일링, 메모리, 코드 아키텍처에 관한 팁을 참고하세요.
프리팹 풀링
CPU 프레임 시간 급증은 게임플레이 중 Prefab 인스턴스화로 인해 거의 전적으로 발생합니다. 게임플레이에 들어가기 전에 발사체, 스폰 가능한 적, 시각적 효과의 객체 풀을 미리 로드하여 시작 시 CPU 급증을 줄이거나 없애는 것이 좋습니다. 장면의 로드 또는 소개 시퀀스 중에 여러 '초기화 프레임'에 추가 최적화를 분산할 수 있습니다.
게임 객체 풀링 관리와 관련된 다양한 서드 파티 풀링 애셋을 Unity 애셋 스토어에서 확인할 수 있습니다. 나만의 목록도 만들 수 있으니 Unity Learn의 객체 풀링 소개를 참고하세요.
Asset Delivery
Google Play에 처음 배포할 때 애플리케이션의 크기에는 제한이 있습니다. 게임의 크기와 성격에 따라 플레이어가 의도한 경험을 할 수 있도록 게임 리소스 (캐릭터 모델, 환경, UI 요소 등)의 일부 또는 전부가 필요할 수 있습니다.
Play Asset Delivery(PAD) 서비스를 사용하여 설치 시간, 빠른 추적 또는 주문형으로 게임에 필요한 애셋을 관리할 수 있습니다. Unity Asset Bundle이 통합되어 PAD를 지원하며, 이 도구를 사용하여 제공되는 요소를 지정할 수 있습니다.
Addressables
런타임에 동적 리소스(예: 프리팹, 텍스처, 사운드 파일)를 설정하는 것은 Addressables 명명 시스템을 준비하고 검토하면 더 이상 복잡한 작업이 아닙니다. 주소 지정 가능한 애셋은 콘텐츠를 빌드하고 로드하는 방식에서 콘텐츠를 정렬하는 방식을 분리합니다. Addressables 시스템은 Resources 폴더와 Asset Bundle을 대체하여 애셋을 참조하고 런타임에 로드하는 방식을 간소화합니다.
예를 보려면 GitHub의 Addressables 패키지를 사용하는 데모 프로젝트를 참고하세요. 어드레서블 개발에 관한 자세한 내용은 Unity 블로그의 어드레서블 애셋 시스템을 참고하세요.
주소 지정 가능한 애셋 레이아웃을 사용하면 공통 번들에 너무 적거나 너무 많은 애셋을 번들링하는 데 장단점이 있습니다. 어드레서블을 사용한 콘텐츠 관리에 대해 자세히 알아보려면 어드레서블로 콘텐츠 관리 간소화하기를 참고하세요.
독립형 데모를 설정하고 액세스 모드를 실험하여 어드레서블 시스템에 익숙해질 수 있습니다. 오픈소스 프로젝트인 BuildLayout Explorer for Unity 2019.3 and newer를 확인하고 Addressables에서 생성된 buildlayout.txt
보고서를 검사할 수도 있습니다.
Unity 오픈 프로젝트인 Chop Chop의 애셋은 모든 로드 및 언로드에 Addressables 시스템을 사용하여 패키징되었습니다. 어드레서블 번들 구성의 구조와 설정에 관한 자세한 내용은 Packaging content with Addressable Assets | Open Projects Devlog(어드레서블 애셋으로 콘텐츠 패키징 | Open Projects 개발자 블로그)를 참고하세요.
Chop Chop 프로젝트에서 기본적으로 로드되는 유일한 장면인 초기화 장면은 프로젝트의 애셋 (장면, 프리팹 등)에 대한 직접 링크 대신 AssetReferences
를 사용하도록 구성되었습니다.
Unity Open Project: Chop Chop의 소스 코드는 GitHub에서 확인할 수 있습니다. 프로젝트는 더 이상 개발되지 않지만 git 저장소와 문서는 계속 사용할 수 있습니다.
서드 파티 플러그인
Unity Asset Store의 플러그인과 같은 서드 파티 플러그인을 사용하는 경우 폴더를 검토하고 Resources 폴더에서 불필요한 애셋을 삭제해야 합니다. 빌드 프로세스 중에 Unity는 Resources 폴더에 포함된 모든 애셋을 수집하고 런타임에 액세스할 수 있는 단일 번들로 패키징합니다. 이렇게 하면 최종 패키지에 블로트가 추가될 수 있으며, 이는 종종 필요하지 않습니다.
모든 리소스 폴더를 빠르게 찾으려면 프로젝트 패널에서 Resources를 검색합니다. 그런 다음 각 항목을 선택하여 포함된 내용을 확인하고 게임에 필요한지 여부를 확인할 수 있습니다.

게시 및 유지관리
모바일 게임을 출시할 준비가 되면 출시할 대상, 알파 및 베타 테스트 방법, 출시 후 성능 모니터링 및 추적 방법을 결정합니다.
한정 출시의 의견 분석
제한된 타겟 잠재고객을 대상으로 출시하여 대규모 베타 테스트를 진행하거나 모든 시장에서 게임을 정식으로 이용할 수 있도록 활성화할 수 있습니다. 한정 출시를 사용하면 더 많은 실제 사용자 및 기기 모음을 기반으로 애플리케이션 성능을 조정할 수 있습니다.
예를 들어 Android Performance Tuner for Unity 및 Google 애널리틱스 for Unity를 사용하여 애플리케이션 성능 및 플레이어 동향에 관한 통계를 얻을 수 있으며, 이를 통해 개발팀에서 업데이트를 조정하고 푸시할 수 있습니다. 또한 분석 데이터를 사용하여 비슷한 장르의 후속작이나 관련 게임을 계획할 수도 있습니다.
알파 및 베타 테스트
Google Play Console에서 애플리케이션 프로필을 설정한 후 공개 알파 및 베타 테스트 빌드를 준비하고 출시 전 검토를 위해 제한된 잠재고객에게 배포할 수 있습니다. 제한된 사용자를 대상으로 출시하면 더 많은 기기 풀에서 최종 문제를 해결하고 글로벌 출시 전에 대응할 수 있는 초기 의견을 수집할 수 있습니다.
Unity 빌드가 Android App Bundle을 통해 배포됩니다. 자세한 내용은 Unity의 Manual: Delivering to Google Play를 참고하세요. 여기에는 APK 파일에서 AAB 형식으로의 변경사항도 설명되어 있습니다.
모니터링 및 추적
게임의 실시간 운영 및 배포 단계에서 Android Vitals를 사용하면 개발 및 테스트 중에 액세스하지 못했을 수 있는 기기의 성능 문제를 추적할 수 있습니다. 자세한 내용은 도달범위 및 기기, Android vitals의 게임 관련 새로운 기능을 참고하세요.
대규모 개발팀에는 기기 성능과 관련된 측정항목을 제공하는 고유한 맞춤 게임 텔레메트리 파이프라인이 있는 경우가 많습니다. Android Performance Tuner (APT) 및 해당 Unity 플러그인을 활용하여 프레임 속도, 그래픽 재현성, 로드 시간, 로드 중 이탈과 관련된 측정항목을 조정하세요. Unity 게임에 Android Performance Tuner 통합의 단계별 가이드를 따르세요.
게임이 출시된 후에도 게임의 수명 주기는 멈추지 않습니다. 성능과 피드백을 모니터링하고 유지하며 이에 응답하는 것은 사용자의 만족도, 긍정적인 리뷰, 모든 시장에서 게임의 궁극적인 채택에 매우 중요합니다.