Version: Unity 6.0 (6000.0)
언어 : 한국어
웹의 에셋 번들
웹 빌드 최적화

배포 크기 및 코드 스트리핑

웹으로 콘텐츠를 퍼블리시할 때는 빌드 크기를 줄여 콘텐츠가 시작되기 이전까지의 다운로드 시간을 적절한 수준에서 유지해야 합니다. 에셋 크기를 줄이는 일반적인 팁은 빌드의 파일 크기 줄이기 기술 자료를 참조하십시오.

웹 관련 힌트와 팁

  • 텍스처 임포터에서 압축된 텍스처 전체를 Crunch 텍스처 압축 포맷으로 지정합니다.

  • 개발 빌드를 배포하지 말아야 합니다. 빌드는 압축되거나 최소화되지 않으므로 파일 크기가 훨씬 더 큽니다.

  • 빌드에 예외가 필요하지 않은 경우, Player 설정 창에서 (Edit > Project Settings > Web 클릭) Publishing Settings 를 펼쳐서 Enable ExceptionsNone 으로 설정합니다.

  • Player settings > Other Settings 패널에서 Strip Engine Code 를 활성화하여 빌드의 효율성을 확보합니다.

  • 타사의 관리 dll을 사용하는 경우 생성한 코드 크기를 늘리는 종속성이 함께 올 수 있다는 점을 유의해야 합니다.

릴리스 빌드를 만드는 경우 Unity는 Web Player 설정의 Publishing Settings 패널에서 선택된 Compression Format 에 따라 빌드 출력 파일을 압축합니다.

압축된 빌드를 퍼블리시하는 상세한 방법은 압축된 빌드 배포를 참조하십시오.

코드 스트리핑

Unity는 기본적으로 빌드에서 사용되지 않는 모든 코드를 제거합니다. 이는 Player 설정을 통해 변경할 수 있습니다(메뉴: Edit > Project Settings 에서 Player 카테고리 선택): Other Settings 패널을 선택하여 Strip Engine Code 옵션에 액세스하십시오. 스트리핑을 활성화한 상태로 빌드하는 것이 좋습니다.

코드 스트리핑을 사용하면 Unity는 프로젝트에 사용된 UnityObject 파생 클래스(스크립트 코드에서 레퍼런스되는 경우 또는 씬의 직렬화된 데이터)를 모두 찾아냅니다. 그런 다음 사용되는 클래스가 없는 Unity 보조 시스템을 빌드에서 제거합니다. 그러면 빌드의 코드가 줄어들어 다운로드 크기가 작아지고 파싱할 코드도 줄어들기 때문에 코드가 더 빨리 실행되고 메모리 사용량도 줄어듭니다.

코드 스트리핑 관련 문제

실제로 필요한 코드를 스트리핑하면 프로젝트에 문제가 발생할 수 있습니다. 예를 들어 메인 빌드에 포함되어 있지 않아 프로젝트에서 제거된 클래스를 포함하는 에셋 번들을 런타임 시점에서 로드하면 문제가 발생합니다. 이 경우 아래와 같이 브라우저의 JavaScript 콘솔에 오류 메시지가 표시됩니다(추가 오류 또한 발생 가능). 예시:

Could not produce class with ID XXX

이러한 오류를 해결하려면 위 예시에서 XXX에 해당하는 ID를 Class ID Reference에서 조회해서 어떤 클래스의 인스턴스를 생성하려 하는지 확인해야 합니다. 이 경우 해당 클래스에 대한 레퍼런스를 스크립트나 씬에 추가하거나 프로젝트에 link.xml 파일을 추가하는 방식으로 Unity가 해당 클래스의 코드를 포함하도록 강제할 수 있습니다.

다음은 Collider 클래스와 Physics 모듈을 프로젝트에 보존하는 하는 예시입니다. 이 XML 코드를 link.xml이라는 파일에 추가하고 해당 파일을 Assets 폴더에 저장합니다.

<linker>
    <assembly fullname="UnityEngine">
        <type fullname="UnityEngine.Collider" preserve="all"/>
    </assembly>
</linker>

스트리핑으로 인해 빌드에 문제가 발생한다고 의심될 경우 테스트 중에 Strip Engine Code 옵션을 비활성화하는 방법도 시도해 볼 수 있습니다.

Unity에서는 최적의 스트리핑을 위하여 빌드에 포함된 모듈과 클래스를 간편하게 확인할 수 있는 수단을 제공하지는 않습니다. 하지만 빌드를 만든 후에 생성되는 Temp/StagingArea/Data/il2cppOutput/UnityClassRegistration.cpp 파일을 확인하면 빌드에 포함된 클래스와 모듈을 개략적으로 확인할 수 있습니다.

Strip Engine Code 옵션은 Unity 엔진 코드에만 영향을 미칩니다. IL2CPP는 항상 관리되는 dll 및 스크립트에서 바이트 코드를 스트리핑하므로, 코드의 정적 참조를 통해서가 아니라 리플렉션을 통해 동적으로 관리되는 유형을 참조해야 하는 경우 문제가 발생할 수 있습니다. 리플렉션을 통해 유형에 액세스해야 하는 경우, 해당 유형을 유지하기 위해 link.xml 파일 또한 설정해야 할 수 있습니다. link.xml 파일에 대한 자세한 내용은 iOS 빌드 크기 최적화에 기술 자료 페이지를 참조하십시오.

빌드 출력 파일 이동

Build 폴더의 위치를 ​​변경하려면 Web Template index.html 파일에서 buildUrl 변수를 수정하십시오.

Build 폴더 내의 파일 위치를 변경하려면 파라미터의 해당 URL(즉 dataUrl, wasmCodeUrl, wasmMemoryUrl, wasmFrameworkUrl)을 index.html 파일의 설정 변수로 변경하십시오.

파일을 CDN(콘텐츠 배포 네트워크)에서 호스트하려면 외부 서버에서 이에 대한 URL을 지정할 수 있으나, 그러려면 호스팅 서버에 CORS(Cross Origin Resource Sharing)가 활성화되었는지 확인해야 합니다. CORS에 대한 자세한 내용은 웹 네트워킹의 매뉴얼 페이지를 참조하십시오.

증분 빌드

IL2CPP가 프로젝트에 대해 생성한 C++ 코드는 점진적으로 컴파일됩니다. 즉, 마지막 빌드가 다시 컴파일된 이후 변경된 생성된 C++ 코드만 컴파일됩니다. 변경되지 않은 소스 코드에는 이전 빌드에서 생성된 것과 동일한 오브젝트 파일이 다시 사용됩니다. 증분 C++ 빌드에 사용되는 오브젝트 파일은 Unity 프로젝트의 Library/il2cpp_cache 디렉토리에 저장됩니다.

증분 컴파일을 사용하지 않고서 생성된 C++ 코드를 완전히 새롭게 빌드하려면 Unity 프로젝트의 Library/il2cpp_cache 디렉토리를 삭제하십시오. Unity 에디터 버전이 이전 웹 빌드에 사용된 버전과 다르면 Unity는 자동으로 완전히 새로운 클린 빌드를 수행합니다.


  • Unity 2017.3에 추가된 Full Without Stacktrace
웹의 에셋 번들
웹 빌드 최적화