빌드 프로세스 중에 Unity는 템플릿 파일을 미리 처리하고 해당 파일에 포함된 모든 매크로와 조건부 지시문을 평가합니다. 이 프로세스의 일환으로 Unity는 모든 매크로 선언을 Unity 에디터가 제공하는 값으로 찾아 교체합니다. Unity는 템플릿 폴더의 모든 .html, .php, .css, .js 및 .json 파일을 자동으로 프리 프로세싱합니다.
다음 내부 프리 프로세서 변수는 프로젝트의 데이터를 참조하며, Unity는 에디터가 제공하는 값에 따라 빌드 시점에 값을 할당합니다. JavaScript 매크로와 조건부 지시문은 이러한 내부 프리 프로세서 변수를 사용할 수 있습니다.
| 가변 | 유형 | 설명 |
|---|---|---|
| COMPANY_NAME | String | 플레이어 설정에 정의된 회사 이름입니다. |
| PRODUCT_NAME | String | 플레이어 설정에 정의된 제품 이름입니다. |
| PRODUCT_VERSION | String | 플레이어 설정에 정의된 버전입니다. |
| WIDTH | 정수 | Player Settings > Resolution and Presentation에 정의된 기본 캔버스 너비입니다. |
| HEIGHT | 정수 | Player Settings > Resolution and Presentation에 정의된 기본 캔버스 높이입니다. |
| SPLASH_SCREEN_STYLE | String | Splash Style Player Settings > Splash Image가 Light on Dark로 설정되어 있을 때 ‘Dark’ 값으로 설정되고, 그렇지 않으면 ‘Light’ 값으로 설정됩니다. |
| BACKGROUND_COLOR | String | 16진수 표기법 형식으로 정의된 배경 컬러를 나타냅니다. |
| UNITY_VERSION | String | Unity 버전입니다. |
| DEVELOPMENT_PLAYER | 부울 | Development Build 옵션이 활성화되면 true로 설정됩니다. |
| DECOMPRESSION_FALLBACK | String | 사용하는 압축 방식과 빌드에 포함된 압축 해제기 유형에 따라 Gzip 또는 Brotli로 설정됩니다. 둘 다 포함되지 않으면 변수가 빈 문자열로 설정됩니다. |
| INITIAL_MEMORY | 정수 | WASM 메모리 힙 초기 크기(MB 단위) |
| USE_WASM | 부울 | 현재 빌드가 WebAssembly 빌드이면 true로 설정됩니다. |
| USE_THREADS | 부울 | 현재 빌드가 스레드를 사용하면 true로 설정됩니다. |
| USE_WEBGL_1_0 | 부울 | 현재 빌드가 WebGL1.0 그래픽스 API를 지원하면 true로 설정됩니다. |
| USE_WEBGL_2_0 | 부울 | 현재 빌드가 WebGL2.0 그래픽스 API를 지원하면 true로 설정됩니다. |
| USE_DATA_CACHING | 부울 | 현재 빌드가 다운로드된 파일에 indexedDB 캐싱을 사용하면 true로 설정됩니다. |
| LOADER_FILENAME | String | 빌드 로더 스크립트의 파일 이름으로 설정됩니다. |
| DATA_FILENAME | String | 메인 데이터 파일의 파일 이름으로 설정됩니다. |
| FRAMEWORK_FILENAME | String | 빌드 프레임워크 스크립트의 파일 이름으로 설정됩니다. |
| CODE_FILENAME | String | 현재 빌드가 WebAssembly 빌드인 경우 WebAssembly 모듈의 파일 이름으로 설정되며, 그렇지 않으면 asm.js 모듈의 파일 이름으로 설정됩니다. |
| MEMORY_FILENAME | String | 메모리가 외부 파일에 저장되는 경우 메모리 파일의 파일 이름으로 설정되며, 그렇지 않은 경우 빈 문자열로 설정됩니다. |
| SYMBOLS_FILENAME | String | 현재 빌드에서 디버그 심볼을 사용하는 경우 디버그 심볼을 포함하는 JSON 파일의 파일 이름으로 설정되며, 그렇지 않은 경우 빈 문자열로 설정됩니다. |
| BACKGROUND_FILENAME | String | 배경 이미지를 Player Settings > Splash Image에서 선택하는 경우 배경 이미지의 파일 이름으로 설정되며, 그렇지 않은 경우 빈 문자열로 설정됩니다. |
JavaScript 매크로는 템플릿 파일의 JavaScript 코드 블록으로, 중괄호 세 쌍으로 둘러싸여 있습니다. 이 JavaScript 코드는 위에 나열된 내부 프리 프로세서 변수를 사용할 수 있습니다. 이러한 변수는 에디터에서 제공하는 값에 따라 빌드 시점에 할당됩니다. 빌드 중에 프리 프로세서는 모든 매크로를 평가하고 변수의 출력으로 대체합니다.
JavaScript 매크로를 사용하여 에디터에서 제공하는 값을 프리 프로세싱할 수 있습니다. 이러한 매크로는 사용하다 보면 복잡할 수 있으며, 여러 연산자, 루프, 함수 및 기타 JavaScript 구성 요소를 포함할 수 있습니다.
다음 예시 줄은 기본 템플릿에서 사용된 index.html 파일에서 가져온 것입니다.
<div id="unity-build-title">{{{ PRODUCT_NAME }}}</div>
Player Settings에서 Product Name의 값이 My WebGL Game으로 설정된 경우 내부 프리 프로세서 변수 PRODUCT_NAME의 값은 My WebGL Game입니다. 출력 index.html 파일의 줄은 다음과 같이 표시됩니다.
<div id="unity-build-title">My WebGL Game</div>
다음은 동일한 index.html 템플릿 파일의 좀더 복잡한 예시입니다.
canvas.style.background = "url('" + buildUrl + "/{{{ BACKGROUND_FILENAME.replace(/'/g, '%27') }}}') center / cover";
타겟 빌드 폴더의 이름이 Let’s try WebGL이고 Player Settings에서 배경 이미지를 선택하면 내부 프리 프로세서 변수 BACKGROUND_FILENAME이 Let’s try WebGL.jpg 값을 갖습니다. 출력 index.html 파일에서 줄은 다음과 같이 변경됩니다.
canvas.style.background = "url('" + buildUrl + "/Let%27s try WebGL.jpg') center / cover";
조건부 지시문 #if, #else, #endif는 Unity가 프리 프로세싱된 파일의 특정 부분을 출력 파일에 포함할지, 아니면 현재 빌드에서 삭제할지 여부를 제어합니다.
#if 지시문으로 시작하고 #endif 지시문으로 끝나는 코드는 조건부 그룹이라고 합니다. 조건부 그룹에는 #else 지시문도 포함될 수 있습니다. Unity는 #if 뒤에 작성된 표현식을 JavaScript 표현식으로 평가합니다. 이 표현식이 부울 컨텍스트에서 평가될 때 true로 해석되는 true와 같은 값을 갖는 경우, Unity는 출력 파일에서 #if 지시문 바로 다음에 줄 그룹을 유지합니다. #if 표현식이 false이고 조건부 그룹에 #else 지시문이 포함된 경우 Unity는 출력에서 #else 지시문 바로 뒤에 줄 그룹을 유지합니다. 조건부 그룹의 예시는 다음과 같습니다.
#if EXPRESSION
// this block is included in the output if EXPRESSION has a truthy value
#else
// this block is included in the output otherwise
#endif
평가된 JavaScript 표현식에는 대괄호, 논리 연산자, 기타 JavaScript 생성자가 포함될 수 있습니다. 조건부 지시문은 중첩될 수 있습니다.