Version: 2021.3
언어: 한국어
WebGL 프로젝트 빌드 및 배포
에셋 번들의 로드 시간 감소

WebGL 애플리케이션 빌드

WebGL용 빌드를 생성하려면 Unity의 메인 메뉴에서 File > Build Settings로 이동합니다. 플랫폼 리스트에서 WebGL을 선택한 후 Switch Platform을 클릭합니다.

빌드 설정을 완료하고 나면 다음 두 옵션에서 선택합니다.

  • Build는 애플리케이션을 플레이어로 빌드합니다.
  • Build and Run은 플레이어에서 애플리케이션을 빌드하고 타겟 플랫폼에서 해당 플레이어를 엽니다.
빌드 설정 창
빌드 설정 창

WebGL용 Unity 빌드 시스템은 다음 설정을 지원합니다.

설정 기능
Texture Compression 프로젝트에서 텍스처에 대한 기본 텍스처 압축 포맷을 설정하려면 아래의 사용 가능한 포맷 옵션에서 선택합니다. 또한 이 설정을 사용하여 스크립트에서 변경하거나 커맨드 라인 스위치-setDefaultPlatformTextureFormat를 사용하여 변경할 수 있습니다. 자세한 내용은 텍스처 압축 포맷 개요를 참조하십시오. 이 설정은 또한 플레이어 설정 창에서도 사용할 수 있습니다.
Use default format (DXT) 이 포맷은 기본 압축 포맷입니다.
ETC 이 확장자는 WebGL API의 일부이며 ETC 압축 텍스처 포맷을 표시합니다.
ETC2 이 확장자는 WebGL API의 일부이며 ETC 압축 텍스처 포맷을 표시합니다. OpenGL 4.3을 사용하는 경우 이 텍스처 압축 포맷을 사용합니다.
ASTC 이 텍스처 압축 포맷은 광범위하게 파생된 압축비로 인해 널리 선택되는 포맷입니다. 예를 들어 ASTC 압축은 대부분의 Intel GPU와 NVIDIA Tegra 칩에 사용할 수 있습니다.
DXT 이 확장자는 DXTn/BCn 압축 포맷을 지원합니다.
Development Build 이 설정을 활성화하여 빌드에 스크립팅 디버그 심볼과 프로파일러를 포함합니다. 이 설정을 활성화하면 Unity는 DEVELOPMENT_BUILD 스크립팅 정의를 설정합니다. 애플리케이션을 테스트하려는 경우에만 이 설정을 사용해야 합니다. 개발 빌드는 콘텐츠를 축소하지 않습니다. 즉 개발 빌드는 배포하기에 매우 큽니다.
Code Optimization WebGL 코드를 컴파일하는 데 사용할 최적화 모드를 선택합니다.
Speed 이 설정은 기본 설정입니다. 이 설정을 선택하면 런타임 성능을 위해 최적화된 WebGL 코드를 생성합니다.
Size 이 설정을 선택하면 빌드 크기에 최적화된 WebGL 코드를 생성합니다. 이는 Android와 iOS의 모바일 브라우저에서 실행할 WebGL 게임을 빌드할 경우 특히 유용합니다. 여기서 기본 속도 최적화 옵션은 모바일 디바이스가 사용하는 비교적 큰 WebAssembly 파일을 생성합니다.
Autoconnect Profiler 일반적으로 이 설정이 활성화되면 이 설정을 통해 자동으로 Unity 프로파일러와 빌드를 연결할 수 있습니다. 하지만 WebGL의 경우 프로파일러를 실행 중인 빌드에 연결할 수 없으므로 이 옵션을 사용하여 콘텐츠를 에디터로 대신 연결합니다. 프로파일러 연결이 WebGL의 WebSockets을 사용하여 처리되기 때문입니다. 그러나 웹 브라우저는 콘텐츠에서 나가는 연결만 허용합니다. 이 설정을 사용하려면 Development Build 옵션을 활성화해야 합니다.
Deep Profiling Support 이 설정을 활성화하여 프로파일러에서 세부 프로파일링을 활성화합니다. 이렇게 하면 프로파일러가 애플리케이션에서 모든 함수 호출을 계측하고 더 자세한 프로파일링 데이터를 반환합니다. 세부 프로파일링 지원을 활성화하면 스크립트 실행이 느려질 수 있습니다. 이 옵션은 Development Build 옵션을 활성화한 경우에만 사용할 수 있습니다.
IL2CPP Code Generation Unity가 IL2CPP 코드 생성을 관리하는 방법을 정의합니다. 이 옵션은 Mono가 아닌 스크립팅 백엔드용으로 IL2CPP를 사용하는 경우에만 사용할 수 있습니다. 스크립팅 백엔드를 변경하려면 Player Settings > Configuration > Scripting Backend로 이동하여 Mono에서 IL2CPP로 변경합니다.
Faster runtime 런타임 성능을 위해 최적화된 코드를 생성합니다. 이것은 Unity 이전 버전의 기본 동작입니다.
Faster (smaller) builds 빌드 크기와 반복을 위해 최적화된 코드를 생성합니다. 코드를 더 적게 생성하며 더 작은 빌드를 만들지만 런타임 성능 특히 일반 코드에 영향을 미칠 수도 있습니다. 변경 사항을 반복할 때와 같이 더 빠른 빌드 시간이 중요한 경우 이 옵션을 사용할 수도 있습니다.
Build 애플리케이션 빌드 시 사용합니다.
Build And Run 이 설정을 사용하여 WebGL 플레이어를 로컬에서 확인합니다. Unity는 로컬 웹 서버를 사용하여 빌드를 호스트하고 localhost URL에서 이를 엽니다. 또는 알맞게 설정된 리스폰스 헤더가 있는 커스텀 로컬 웹 서버를 사용할 수 있습니다. 자세한 내용은 WebGL: 압축된 빌드와 서버 설정을 참조하십시오.

Asset Import Overrides에 대한 설정을 변경하려면 빌드 설정을 참조하십시오.

빌드 폴더

Build 폴더에는 다음의 파일이 포함되어 있습니다([ExampleBuild]는 타겟 빌드 폴더 이름 표시).

파일 이름 내용물
[ExampleBuild].loader.js 웹 페이지가 Unity 콘텐츠를 로드하는 데 필요한 JavaScript 코드.
[ExampleBuild].framework.js JavaScript 런타임 및 플러그인.
[ExampleBuild].wasm WebAssembly 바이너리.
[ExampleBuild].mem 플레이어의 힙 메모리를 초기화하는 바이너리 이미지. Unity는 멀티 스레드 WebAssembly 빌드에 대해서만 이 파일을 생성합니다.
[ExampleBuild].data 에셋 데이터 및 씬.
[ExampleBuild].symbols.json 오류 스택 추적을 디맹글하는 데 필요한 디버그 심볼 이름. 이 파일은 Debug Symbols 옵션(File > Build Settings > Player Settings)을 활성화한 경우에만 릴리스 빌드에 대해 생성됩니다.
[ExampleBuild].jpg 빌드가 로드되는 동안 표시되는 배경 이미지. 이 파일은 플레이어 설정(File > Build Settings > Player Settings > Splash Image)에서 배경 이미지가 제공된 경우에만 생성됩니다. 자세한 내용은 스플래시 화면 페이지를 참조하십시오.

빌드에 대해 Compression Method를 활성화하면 Unity는 압축 방식에 해당하는 확장자를 식별하고 해당 확장자를 Build 하위 폴더 내의 파일 이름에 추가합니다. Decompression Fallback을 활성화하면 Unity는 빌드 파일 이름에 .unityweb 확장자를 추가합니다. 그렇지 않으면 Unity는 Gzip 압축 방식의 경우 .gz, Brotli 압축 방식의 경우 .br 확장자를 추가합니다. 자세한 내용은 WebGL: 압축 빌드 및 서버 설정을 참조하십시오.

플레이어 설정에서 Name Files As Hashes를 활성화하는 경우 Unity는 기본 파일 이름이 아닌 파일 콘텐츠의 해시를 사용합니다. 이는 빌드 폴더의 각 파일마다 적용됩니다. 이 옵션을 사용하여 게임 빌드의 업데이트된 버전을 서버의 동일한 폴더로 업로드할 수 있으며 빌드 반복 간 변경된 파일만 업로드할 수도 있습니다.

참고: 일부 브라우저에서는 파일 시스템에서 플레이어를 직접 열 수 없습니다. 이는 로컬 파일 URL에 적용된 보안 제한 사항 때문입니다.

세부 프로파일링 지원

Deep Profiling Support 설정을 활성화하면 Unity 프로파일러가 애플리케이션의 모든 함수 호출을 프로파일링합니다. 자세한 내용은 세부 프로파일링 문서를 참조하십시오.

Player settings

WebGL은 플레이어 설정(메뉴: Edit > Project Settings 에서 Player 카테고리 선택)에 몇 가지 추가 옵션이 있습니다.

기타 설정

엔진 코드 스트립

Other Settings 를 열어 Strip Engine Code 옵션에 액세스합니다. 이 옵션은 기본적으로 선택되어 있어 WebGL에 대해 코드 스트리핑을 활성화합니다. 이 옵션이 선택되어 있으면 Unity는 사용되지 않은 클래스에 대한 코드를 포함시키지 않습니다. 예를 들어, 물리 컴포넌트 또는 함수를 사용하지 않으면 전체 물리 엔진이 빌드에서 제거됩니다. 세부 정보는 아래의 스크리핑 섹션을 참조하십시오.

퍼블리싱 설정

예외 활성화

Publishing Settings 를 열어 Enable Exceptions 에 접근합니다. Enable Exceptions 를 통해 런타임에 예기치 않은 코드 동작(일반적으로 오류로 간주됨)을 처리하는 방법을 지정할 수 있습니다. 다음 옵션이 있습니다.

  • None: 예외 지원이 필요하지 않은 경우에 선택합니다. 성능이 극대화되고 빌드가 최소화됩니다. 이 옵션을 선택하면 폐기된 예외로 인해 해당 설정에 오류가 있는 경우 콘텐츠가 중지됩니다.
  • Explicitly Thrown Exceptions Only (기본): 스크립트의 throw 문에서 명시적으로 지정된 예외를 캡처하고 finally 블록이 호출되도록 하려면 이 옵션을 선택합니다. 이 옵션을 선택하면 스크립트에서 생성된 JavaScript 코드가 더 길어지고 더 느려지지만, 스크립트가 프로젝트의 중요한 병목 지점인 경우를 제외하고는 문제가 되지 않을 것입니다.
  • Full Without Stacktrace: 다음을 캡처하려면 이 옵션을 선택합니다.
    • 스크립트의 throw 문에서 명시적으로 지정된 예외(Explicitly Thrown Exceptions Only 옵션과 동일)
    • Null 레퍼런스
    • 범위 이탈 배열 액세스
  • Full With Stacktrace: 이 옵션의 상기 옵션과 유사하지만 스택 추적도 캡처합니다. Unity는 이런 예외에 대한 확인을 코드에 포함시켜서 예외를 생성하므로, 이 옵션을 선택하면 성능이 둔화되고 브라우저 메모리 사용이 증가합니다. 디버깅에만 이 옵션을 사용하고 항상 64비트 브라우저에서 테스트해야 합니다.

Publishing Settings를 선택하여 Data Caching에 접근합니다.

데이터 캐싱

Data Caching에 액세스하려면 File > Build Settings > Player Settings > WebGL을 거쳐 Publishing Setings로 이동합니다. 이렇게 하면 브라우저가 메인 데이터 파일을 IndexedDB 데이터베이스로 캐싱할 수 있습니다.

기본 브라우저 HTTP 캐시를 사용한다고 해서 브라우저가 특정 리스폰스를 캐싱한다고 보장하지는 않습니다. 이는 브라우저 HTTP 캐시의 공간이 제한되고, 브라우저가 너무 큰 파일은 캐싱하지 못할 수 있기 때문입니다.

로드 시간을 향상하기 위해 IndexedDB를 사용하면 브라우저 제한을 초과하여 파일을 캐싱할 수 있습니다. 더 많은 파일을 캐싱하면 다음 빌드 실행 동안 사용자 컴퓨터에서 다운로드한 콘텐츠를 사용할 수 있는 가능성이 높아집니다.

데이터 캐싱은 HTTP 리스폰스를 위해 .data 파일만 IndexedDB 캐시에 캐싱합니다. 에셋 번들을 캐싱하려면 Data Caching을 활성화하고 unityInstance.Module.cacheControl()을 오버라이드해야 합니다. 이렇게 하려면 Module.cacheControl(url)이 요청된 에셋 번들 URL에 대해 must-revalidate를 반환하는지 확인하십시오. 예를 들어 createUnityInstance()가 반환하는 Promise의 이행 콜백에서 unityInstance.Module.cacheControl() 함수를 오버라이드할 수 있습니다. createUnityInstance()에 대한 자세한 내용은 WebGL: 압축 빌드 및 서버 설정을 참조하십시오.


  • Unity 2019.1에서 asm.js 링커 타겟 삭제됨
  • Unity 2020.1에서 빌드 파일 업데이트 및 데이터 캐싱 추가됨
WebGL 프로젝트 빌드 및 배포
에셋 번들의 로드 시간 감소