Unity에서 게임 개발 시작하기

이 가이드에서는 일반적인 게임 개발 주기를 간략히 설명합니다. 이 내용을 읽은 후 참고 자료로도 도움이 될 수 있습니다.

Unity로 작업할 때 개발 수명 주기는 세 가지로 구성됩니다. 단계:

  • 계획 및 설계
  • 개발 및 테스트
  • 게시 및 유지관리

계획 및 설계

계획 및 디자인 단계에서는 게임 빌드 방법을 결정합니다. 나 모바일 개발의 문제를 해결하는 방법을 결정하고 개발에 사용할 도구와 프로세스 파악

모든 팀원의 의견을 받으세요.

예술, 엔지니어링, 디자인, 오디오, 이를 통해 구현 작업을 파악 및 기록할 수 있습니다. 예를 들면 다음과 같습니다.

  • 아트팀에서 캐릭터에 대한 애셋 텍스처 및 메시 예산을 만들 수 있습니다. 살펴봤습니다
  • 엔지니어링에서 메모리 및 성능 체크포인트를 결정하고 확인할 수 있습니다
  • 설계에서는 경험을 가능하게 하는 게임 메커니즘을 계획할 수 있습니다.
  • 오디오 전문가는 두 오디오 간 사운드 연속성에 대한 요구사항을 UI, 2D, 3D 공간 음향
  • 프로덕션에서는 출시 요구사항을 전달하고 목표를 향해 나아가는 것입니다.

모바일을 위한 디자인

모바일 플랫폼용 애플리케이션 개발에는 구체적인 고려사항이 포함됩니다. 예:

  • 다양한 화면 가로세로 비율
  • 전력 소모량
  • 열 및 프로세서 제한
  • 터치 입력
  • 크로스 플랫폼 개발
  • 그래픽 API (Vulkan 또는 OpenGL ES)

모바일 설계 시 고려해야 할 사항에 대한 자세한 내용은 다음을 참조하세요. Unity에서 Android 개발 컨테이너 이미지만 Google Play 아카데미.

개발 및 테스트

개발 및 테스트 단계에서는 게임을 빌드하고 출시 전 준비를 위한 것입니다 몇 가지 제한적인 내부 테스트를 할 수 있습니다. 준비할 수 있습니다 사용자는 에셋을 기반으로 Unity에서 애셋을 Play Asset Delivery 및 Unity Addressables 있습니다

다음 섹션에서는 이러한 목적으로 설계된 Unity 도구와 기법을 설명합니다. 몇 가지 기본 원칙이 있습니다.

렌더링

렌더링은 Unity 장면에서 3D 및 2D 애셋을 그리는 프로세스입니다. 화면에 나타납니다. Unity 엔진이 렌더링을 처리하는 동안 Android 플랫폼의 몇 가지 요소를 고려하는 것이 중요합니다.

텍스처

타겟을 기준으로 가장 큰 텍스처 크기가 필요한지 결정 기기에서 사용할 수 있습니다. 프로파일링할 때 메모리 할당 목표 변경 시 잠재적 절감액 검토 텍스처 크기입니다.

프레임 시간

Android 기기의 과열을 방지하려면 프레임 시간을 타겟팅하세요. 평균 21밀리초 미만의 값 때로는 짧은 동영상 시청 환경, 프레임 시간 등 21밀리초를 초과할 수 있지만 21밀리초 미만으로 유지해야 합니다. 밀리초 기준점을 초과할 수 없습니다.

모바일 플랫폼에서 사용 설정하지 않으면 강제 VSync에서 프레임 속도를 조절합니다. 최소 타겟에 도달 예를 들어 60Hz 화면 업데이트에서 60fps인 경우 게임이 30으로 제한됩니다. 30에 도달하지 못하면 15.

다수의 Android 기기는 60Hz 및 120Hz의 화면 재생 빈도로 출시됩니다. 훨씬 더 짧은 프레임 시간을 목표로 하는 이점 (10ms는 60Hz 업데이트, 120Hz의 경우 5ms)의 전송 제한 없이 작동하거나 배터리 소모를 줄일 수 있습니다.

Unity에서 게임의 특정 프레임 속도를 설정하려면 다음을 사용합니다. Application.targetFrameRate에 등록하지 마세요.

Android Frame Pacing 라이브러리를 사용하면 애플리케이션이 다음 프레임을 표시하는 데 시간이 오래 걸릴 때 매끄럽게 더 많을 수 있습니다. Unity 버전 2021 이상의 경우 Android 프레임 속도를 사용 설정하면 디스플레이 새로고침 빈도가 가장 잘 일치하는 항목을 찾습니다. 이렇게 하면 게임에서 불필요한 디스플레이 업데이트로 배터리 전원을 낭비합니다.

라이브러리를 사용 설정하려면 프로젝트 설정 > Player(플레이어) Android 설정에서 Optimized Frame Pacing(최적화된 프레임 속도) 체크박스를 선택합니다.

프로젝트 설정을 보여주는 대화상자 > 플레이어 설정 > 명성 예산 소진 속도 최적화
그림 1. Optimized Frame Pacing(최적화된 프레임 속도)은 Unity 2019.2 이상의 플레이어 설정

Vulkan API

Vulkan은 크로스 플랫폼 고성능 3D입니다. 그래픽 API를 지원합니다. Unity에서 Vulkan 사용 가능 두 가지입니다

자동 그래픽 API

Auto Graphics API는 Vulkan과 함께 사용할 수 있지만 설치한 Unity 버전에 따라 다릅니다. 선택할 수 있는 옵션은 다음과 같습니다. 프로젝트 설정 > 플레이어 > 렌더링

어떤 Unity 버전을 업로드할지 선택할 때 다음 사항을 사용:

  • Unity 2021.1 및 이전 버전은 Auto 그래픽 API Unity에서 OpenGL ES 3.2를 사용하려고 합니다. 기기가 지원되지 않는 경우 OpenGL ES 3.2, Unity는 OpenGL ES 3.1, 3.0 또는 2.0 순서로 돌아갑니다.
  • Unity 2021.2 이상 버전에서는 Vulkan을 먼저 사용합니다. 기기가 Unity는 Vulkan을 지원하지 않으므로 Unity는 OpenGL ES 3.2, 3.1, 3.0 또는 2.0으로 대체됩니다.
프로젝트 설정 > 플레이어 설정 > 렌더링 > 자동 그래픽 API
그림 2. 자동 그래픽 API 설정

수동 그래픽 API

또는 Auto Graphics API를 사용 중지하여 Vulkan을 수동으로 사용 설정할 수 있습니다. Unity 2021.1 또는 이전 버전을 사용하는 경우 이 방법만 사용하여 Vulkan

이 목록에서 Vulkan의 순서가 OpenGL ES보다 높은 경우 Unity는 먼저 Vulkan 기기에서 Vulkan을 지원하지 않으면 Unity는 OpenGL ES로 실행됩니다. Android의 Vulkan에 관한 자세한 내용은 Vulkan 시작하기를 참고하세요. 예를 들면 다음과 같습니다. 게임 성능을 최적화하는 방법을 배웠습니다.

프로젝트 설정 > 플레이어 설정 > 렌더링 > 그래픽 API
그림 3. Auto Graphics API 사용 시 그래픽 API 수동 설정 이(가) 사용 중지되었습니다. Vulkan이 첫 번째 옵션입니다. Unity는 OpenGL ES 3.0으로 대체됩니다.

그리기 호출

화면에 표시되는 모든 항목은 하나 이상의 그리기 호출과 연결됩니다. 사용 설정됨 사용자의 참여를 이끌어내는 그리기 호출 수를 최적화하고 그래픽 처리 장치 (GPU)로 보냅니다.

그리기 호출은 신호등에 줄을 서 있는 자동차와 유사한 개념입니다. 그런 다음 표시등이 녹색으로 바뀌면 일정 수의 자동차가 신호등을 통과하기 전에 있습니다. 표시등이 노란색으로 바뀌면 이상적인 타겟 프레임에 도달한 것입니다. 표시등이 빨간색으로 바뀌면 밀리초 프레임 시간 제한입니다. 다음 렌더링 프레임에 영향을 미치는 과거의 모든 항목 결과 프레임 속도가 목표한 30fps보다 낮습니다.

게임에서 무승부 호출 성능을 개선하는 방법에 관한 자세한 내용은 자세한 내용은 일괄 처리 문서를 참조하세요

그림자

섀도우 캐스팅 그리기 호출은 GPU 집약적인 작업이며, GPU 시간을 단축할 수 있습니다. 섀도우 캐스팅 비용 절감 부드러운 그림자 대신 단단한 그림자를 사용해 실험해 보세요. 만약 저사양 기기의 경우 여전히 GPU에서 비용이 너무 많이 듭니다. 블루 톤 효과를 적용할 수 있습니다.

텍스처

권장 텍스처 Android에서 RGB 및 RGBA 텍스처의 압축 형식은 ASTC입니다. Unity에서는 Android에서 사용해야 하는 최소 텍스처 압축 옵션 ETC2입니다. 이 경우 ETC2로 대체할 수 있습니다. Unity Build Settings(Unity 빌드 설정)의 ASTC에서 백업합니다.

플랫폼별로 지원되는 형식의 전체 목록은 Unity 문서( 수동: 권장, 기본, 지원되는 텍스처 형식(플랫폼별).

사용자 인터페이스 및 가로세로 비율

Unity 기기 시뮬레이터 다양한 기기 화면 해상도, 방향, 가로세로 비율을 직접 수정할 수 있습니다. 게임 뷰 간에 전환할 수 있습니다. 기기 시뮬레이터 보기입니다.

다음 페이지에서 도구의 미리보기를 확인하세요. Unity에서 기기 시뮬레이터를 사용하여 게임을 시뮬레이션합니다.

그림 4. Trivial Kart를 실행하는 기기 시뮬레이터

Trivial Kart 소스 코드는 games-samples 확인할 수 있습니다

다음 위치에서 UI 캔버스 요소의 레이아웃과 정확성을 빠르게 확인할 수 있습니다. 드롭다운에서 기기 옵션을 선택하여 기기 시뮬레이터 보기 메뉴:

프로젝트 설정 > 플레이어 설정 > 최적화된 프레임 속도
그림 5. 기기 시뮬레이터는 편집기 내에서 기기 변경을 지원합니다. 설계 문제를 조기에 발견할 수 있습니다.
를 통해 개인정보처리방침을 정의할 수 있습니다. <ph type="x-smartling-placeholder">
</ph> 프로젝트 설정 > 플레이어 설정 > 명성 예산 소진 속도 최적화
그림 6. 출시 전 패키지 사용 설정을 기기 시뮬레이터 패키지를 다운로드합니다.

Unity의 UI 최적화 기법에 대한 자세한 내용은 다음 튜토리얼에서 확인하세요. Unity: Unity UI 최적화를 참조하세요.

물리학

Nvidia PhysX 엔진은 Unity에 내장되어 있습니다. 기본 설정 모바일에서는 비용이 많이 들 수 있으므로 다음 사항을 고려하세요.

  • 목표 프레임 속도를 고려하고 그에 따라 고정된 시간 단계를 설정하세요. 기본값은 0.02ms 또는 50Hz로 설정됩니다. 0.03으로 늘리거나 목표물이 30fps인 경우 더 높아야 합니다.
  • 메시 충돌기 단순화 및 레이어 충돌 최소화 고려 특정 레이어의 게임 객체 간의 상호작용을 결정하는 행렬 있습니다.

자세한 내용은 물리학 설정 최적화에 대해 자세히 알아보려면 모바일 게임 최적화 eBook 확인할 수 있습니다

프로필

애플리케이션 개발자는 애플리케이션이 출시되기 전까지는 프로파일링을 간과하거나 무시하는 경우가 많습니다. 중대한 장애점에 도달하는 시간을 예로 들 수 있습니다 전담팀을 정하고 프로파일링 시간을 프로세스에 추가하고 다음 권장사항을 따르세요.

  • 개발 중에 프로파일링을 할당할 수 있는 핵심 사항 파악 모델을 무작위로 맞추는 것이 아니라
  • 다음에 사용할 프로필 스냅샷을 저장합니다. Unity 프로필 분석기.
  • 대상 기기에서 게임을 프로파일링하여 현재 개발 단계에서 성능이 어떤지 알아볼 수 있습니다.
  • 게임의 다양한 부분을 프로파일링하세요.
  • 플레이어의 게임 플레이 방식을 프로파일링합니다. (게임만 프로파일링하지 마세요. 사용할 수 없습니다.)
  • 한동안 게임을 실행한 후 지속 모드로 설정된 프로필 모바일 광고가 게재될 때 발생할 수 있는 한 기기

다음 프로파일링 도구를 별도로 사용하거나 조합하여 사용할 수 있습니다.

  • Unity 프로파일러: Unity 프로파일러는 통합 기능으로서 분석 도구로, Unity 편집기 및 개발 모드 빌드를 실행하는 독립 실행형 Android 기기에 연결합니다.

  • Android GPU 검사기: Android GPU 검사기 (AGI) 프레임 수준 디버깅을 실행할 수 있습니다. AGI 또한 GPU, CPU, 메모리, 배터리, GPU를 포함한 시스템 서비스를 분석합니다. 카운터

Unity에서 게임을 프로파일링하는 방법에 관한 자세한 내용은 동영상을 시청하세요. Unity의 프로파일링 소개 또는 Unity 게임 프로파일링을 위한 종합 가이드 확인할 수 있습니다

메모리 관리

Android 프로세스는 대상 기기에서 사용 가능한 메모리를 공유합니다. 해야 할 일 대상 테스트 기기에 여유 메모리가 충분한 경우 메모리 사용량 프로파일링 리소스를 배포합니다 일관된 테스트 실행으로 메모리 테스트 실행 세션과 메모리 사용량 추세를 비교할 수 있습니다. 적절하게 조정할 수 있습니다

C#으로 작성된 스크립트로 작업할 때 문자열, 문자열 비교, 문자열 관련 객체 (예: JSON) 할당 파일 참조). 빈번한 메모리 할당이 생성되고 단편화에 기여합니다

다음과 같은 방법을 사용해 보세요. StringBuilder 인플레이스(In-Place) 연결을 통해 문자열 조작의 대규모 시퀀스를 위한 클래스 문자열 (예: 'this' + 'is' + 'a' + 'bad' + 'idea' vs. StringBuilder.Concat() 함수 호출).

문자열에 관한 자세한 내용은 다음을 참고하세요. 문자열 및 텍스트 참조하세요

TextAsset 및 JSON 텍스트 리소스를 우선 평가 ScriptableObject 유형. ScriptableObjects가 크로스 장면 데이터 저장소를 처리합니다. 편집하고 편집까지 걸리는 시간을 수정할 수 있어야 합니다

기본값의 대안을 사용하는 것에 대한 논의는 모바일 최적화를 위한 JSON 핸들입니다. 도움말을 참조하세요. 네트워크 게임의 숨겨진 최적화 기능 를 살펴보세요.

사용 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 최고의 엔지니어가 알려주는 프로파일링, 메모리, 코드 아키텍처에 관한 팁

Prefab 풀링

CPU 프레임 시간 급증은 대부분 실행 중에 Prefab 인스턴스화가 있습니다. 발사체를 위한 예열 객체 풀을 고려하고, 게임 플레이에 들어가기 전에 생성 가능한 적 및 시각 효과를 시작 CPU 급증을 제거할 수 있습니다 추가 최적화를 분산하여 여러 '초기화 프레임'을 로드 중 또는 도입부 시퀀스를 만드세요

Unity 애셋에서 다양한 서드 파티 풀링 애셋을 찾을 수 있습니다. 스토어 게임 객체 풀링 관리와 관련이 있습니다. 나만의 목록도 만들 수 있으니 자세한 내용은 Unity Learn의 객체 풀링 소개

애셋 전송

최초 실행 시 애플리케이션의 크기에는 제한이 있습니다. Google Play에 배포되었습니다 게임의 크기와 특성에 따라 게임 리소스 (캐릭터 모델, 환경, UI 요소 등)를 배치하여 플레이어가 원하는 경험을 얻을 수 있도록 해야 합니다.

Play Asset Delivery (PAD) 서비스를 사용하여 설치 시 게임에 필요한 애셋을 관리하고, 패스트 팔로우, 주문형으로 설정할 수 있습니다 Unity Asset Bundle이 통합되어 PAD를 사용할 수 있고, 도구를 사용하여 전송할 요소를 지정할 수 있습니다.

Addressable

프리패브, 텍스처, 사운드와 같은 동적 리소스 설정 준비만 하면 런타임 시 더 이상 복잡한 작업이 되지 않습니다. Addressables 이름 지정 시스템을 검토하세요 주소 지정 가능 애셋은 콘텐츠를 구성하는 방식과 콘텐츠를 만들고 로드하는 방식을 분리합니다. 있습니다. Addressables 시스템이 리소스 폴더와 애셋을 대체 번들을 통해 애셋을 참조하고 런타임에 로드하는 방법을 간소화할 수 있습니다.

예를 보려면 다음을 참조하세요. Addressables 패키지를 사용하는 데모 프로젝트 를 참조하세요. Addressables 개발에 관한 자세한 내용은 Unity 블로그의 해결 가능한 애셋 시스템

Addressable 애셋 레이아웃을 사용하면 너무 적거나 공통 번들에 너무 많은 애셋을 포함할 수 있습니다. 콘텐츠 관리에 대해 자세히 알아보려면 Addressables는 Addressables로 콘텐츠 관리를 간소화하세요.

다음과 같은 방법을 사용할 수 있습니다. 독립형 데모를 실행하고 액세스 모드를 실험하여 Addressables 시스템에 익숙해야 합니다 또한 오픈소스 프로젝트를 Unity 2019.3 이상용 BuildLayout 탐색기, kubectl apply 명령어로 생성된 buildlayout.txt 보고서를 Addressables.

Unity Open Project인 Chop Chop의 자산은 모든 로드 및 언로드를 위한 Addressables 시스템 자세한 내용은 주소 지정 가능한 애셋으로 콘텐츠 패키징 | 프로젝트 Devlog 열기 Addressables 구성의 구조 및 설정 둘러보기 있습니다

Chop Chop 프로젝트에서는 기본적으로 로드된 유일한 장면인 장면이 AssetReferences 프로젝트 (장면, 프리패브 등)를 기반으로 합니다.

코드의 소스 코드는 Unity 공개 프로젝트: Chop Chop GitHub에서 확인할 수 있습니다 비록 프로젝트는 더 이상 개발 중이 아니지만, Git 저장소와 문서는 계속 사용할 수 있습니다.

서드 파티 플러그인

Unity 애셋에 있는 플러그인과 같은 서드 파티 플러그인을 폴더를 검토하고 불필요한 애셋을 삭제하세요. Resources 폴더를 다운로드합니다. 빌드 프로세스 중에 Unity는 Resources 폴더에 포함된 애셋을 가져와서 하나의 애셋으로 패키징합니다. 런타임 시 액세스할 수 있는 번들을 제공합니다. 이로 인해 최종 패키지에 팽창이 생길 수 있습니다. 종종 필요하지 않습니다

모든 리소스 폴더를 빠르게 찾으려면 프로젝트 패널을 닫습니다 그런 다음 각 객체를 선택하여 포함된 내용이 무엇인지, 아니면 다른 곳에 포함되어 있는지 필요합니다.

그림 7. Resources 폴더가 여러 개 있을 수 있습니다. Unity Asset Store에서 다운로드한 폴더에 숨어 있습니다. 최대 애플리케이션 번들에 패키징하는 것을 방지할 수 있습니다.

게시 및 유지관리

모바일 게임을 출시할 준비가 되면 게임을 시작할 대상을 결정하세요. 알파 및 베타 테스트 방법, 그리고 사용 중인 제품의 애플리케이션을 모니터링하고 실적입니다.

한정 출시의 의견 분석

제한된 타겟 잠재고객을 대상으로 출시하고 대규모 베타 테스트를 수행할 수 있습니다. 테스트하거나 게임을 활성화하여 모든 시장에서 정식으로 사용하세요. 이 더 넓은 범위를 기준으로 애플리케이션 성능을 미세 조정할 수 있습니다. 실시간 시청자 및 기기 모음이 있습니다.

예를 들어 Unity용 Android Performance TunerUnity용 Google 애널리틱스 애플리케이션 성능과 플레이어 동향에 대한 유용한 정보를 개발팀이 업데이트를 조정하고 푸시할 수 있습니다 다음을 사용할 수도 있습니다. 후속편을 계획하거나 유사한 장르의 관련 게임을 찾습니다.

알파 및 베타 테스트

Google Cloud에서 애플리케이션 프로필을 설정한 후 Google Play Console에서 앱을 테스트하면 공개적으로 알파 및 베타 테스트 빌드를 빌드하고 특정 사용자에게 살펴보겠습니다 작성자: 일부 잠재고객을 대상으로 출시한 경우 더 큰 규모의 고객과 함께 최종 문제를 해결할 수 있습니다. 의견을 수렴하여 사전에 모으고, 전 세계에 출시됩니다.

Unity 빌드는 Android App Bundle을 통해 배포됩니다. 자세히 알아보려면 자세한 내용은 수동: Google Play에 제공 APK 파일에서 AAB로의 변경사항도 설명됨 형식으로 입력합니다.

모니터링 및 추적

게임의 운영 및 배포 단계에서 Android Vitals를 사용하여 액세스 문제가 발생할 수 있는 기기의 성능 문제를 줄일 수 있는 방법을 개발 및 테스트입니다 자세한 내용은 도달범위, 기기, Android vitals에 관한 게임 관련 새로운 소식

대규모 개발팀에 고유한 커스텀 게임 원격 분석 파이프라인이 있는 경우가 많음 기기 성능과 관련된 측정항목을 제공합니다. 잊지 말고 의 Android Performance Tuner (APT) 해당 Unity 플러그인을 사용하여 프레임 속도, 그래픽 재현성, 로딩 시간, 로드 중 이탈을 파악할 수 있습니다. 단계별 안내 Unity 게임에 Android Performance Tuner 통합

게임의 수명 주기는 게시 후에도 중지되지 않습니다. 성능과 피드백의 모니터링, 유지, 대응이 중요 긍정적인 리뷰를 얻으며 게임 환경을 개선하는 데 도움이 되는 있습니다.