Unity는 WebGL 빌드 옵션을 사용하면 콘텐츠를 JavaScript 프로그램으로 퍼블리시할 수 있습니다. 이 프로그램은 HTML5 기술과 WebGL 렌더링 API를 사용하여 Unity 콘텐츠를 웹 브라우저에서 실행합니다. WebGL 콘텐츠를 빌드하고 테스트하려면 Build Player 창에서 WebGL 빌드 타겟을 선택하고 Build & Run 을 클릭합니다.
WebGL에서 실행하려면 모든 코드가 JavaScript여야 합니다. (C 및 C++로 작성된) Unity 런타임 코드를 asm.js JavaScript로 크로스 컴파일하려면 emscripten 컴파일러 툴체인을 사용합니다. asm.js는 매우 최적화하기 쉬운 JavaScript의 서브셋으로서, 이를 통해 JavaScript 엔진은 asm.js 코드를 매우 효율적인 네이티브 코드로 AOT-컴파일할 수 있습니다.
.NET 게임 코드(C# 및 UnityScript 스크립트)를 JavaScript로 변환하려면 IL2CPP라는 기술을 사용합니다. IL2CPP는 .NET 바이트코드를 해당 C++ 소스 파일로 변환하고, 이 파일은 스크립트를 JavaScript로 변환하기 위해 emscripten을 사용하여 컴파일됩니다.
Unity WebGL 콘텐츠는 대부분의 주요 데스크톱 브라우저의 최신 버전에서 지원되지만, 각 브라우저에서 제공하는 지원 수준의 차이가 있습니다. Unity WebGL은 현재 모바일 디바이스를 지원하지 않습니다.
주로 플랫폼의 한계 때문에 Unity의 일부 기능은 WebGL 빌드에 사용할 수 없습니다. 구체적으로 설명하면 다음과 같습니다.
스레드는 지원되지 않습니다. JavaScript에서 스레딩이 지원되지 않기 때문입니다. Unity에서 성능을 높이기 위해 스레드를 내부적으로 사용하는 경우와 스크립트 코드 및 관리 dll에서 스레드를 사용하는 경우 모두 스레딩이 지원되지 않습니다. 기본적으로 System.Threading
네임스페이스 안에 있는 것은 모두 지원되지 않습니다.
WebGL 빌드를 MonoDevelop 또는 Visual Studio에서 디버깅할 수 없습니다. WebGL 빌드 디버깅 및 문제 해결을 참조하십시오.
보안 문제로 인해, 브라우저에서는 네트워킹을 위한 IP 소켓의 직접 액세스를 허용하지 않습니다. WebGL 네트워킹을 참조하십시오.
WebGL 그래픽스 API는 몇 가지 제한이 있는 OpenGL ES 2.0 및 3.0과 동일합니다. WebGL 그래픽스을 참조하십시오.
WebGL 빌드에서는 Web Audio API 기반 커스텀 백엔드를 오디오에 사용합니다. 기본 오디오 기능만 지원됩니다. WebGL에서 오디오 사용을 참조하십시오.
WebGL은 AOT 플랫폼이므로 System.Reflection.Emit
를 사용하여 코드를 동적으로 생성할 수 없습니다. 다른 모든 IL2CPP 플랫폼, iOS, 그리고 대부분의 콘솔도 마찬가지입니다.