웹 기술은 웹 브라우저에서 실행되도록 설계된 Unity 웹 애플리케이션에 제한을 가합니다. 웹 플랫폼용 애플리케이션을 빌드하기 전에 다음과 같은 기술적 제한 사항을 숙지해야 합니다.
많이 사용되는 대부분의 데스크톱 브라우저 버전은 Unity 웹 콘텐츠를 지원하지만, 브라우저마다 서로 다른 수준의 지원을 제공합니다. 예를 들어 Unity 웹은 모바일 디바이스를 지원하지 않습니다.
웹 빌드에서 다음 기능은 플랫폼 자체의 제약으로 인해 사용이 불가하거나 제한됩니다.
Visual Studio에서 웹 빌드 디버깅. 웹 빌드 디버깅 및 문제 해결을 참조하십시오.
파일 시스템에 대한 액세스가 브라우저에서 제한되어 있으므로 웹 빌드는 Unity 캐시 및 캐시 스크립팅 API를 지원하지 않습니다. 대신 에셋 데이터 및 에셋 번들에 대한 네트워크 요청이 브라우저 캐시에 캐시됩니다. 웹에서의 캐시 동작을 참조하십시오.
JavaScript에서 스레딩이 지원되지 않기 때문에 스레드는 지원되지 않습니다.Unity에서 성능을 높이기 위해 스레드를 내부적으로 사용하는 경우와 스크립트 코드 및 관리 dll에서 스레드를 사용하는 경우 모두 스레딩이 지원되지 않습니다.기본적으로 System.Threading
네임스페이스 안에 있는 것은 모두 지원되지 않습니다.
보안 문제로 인해 브라우저에서는 네트워킹을 위한 IP 소켓의 직접 액세스를 허용하지 않습니다. 웹 네트워킹을 참조하십시오.
OpenGL ES 그래픽스 라이브러리의 기능을 기반으로 하는 WebGL 그래픽스 API의 제한 사항입니다. 웹 그래픽스를 참조하십시오.
웹 빌드는 Web Audio API를 기반으로 하는 오디오용 커스텀 백엔드를 사용하지만 기본 오디오 기능만 지원합니다. 웹에서 오디오 사용을 참조하십시오.
웹은 AOT 플랫폼이므로 System.Reflection.Emit
을 사용한 동적 코드 생성을 허용하지 않습니다. 이는 다른 모든 IL2CPP 플랫폼, iOS 및 대부분의 콘솔에서 동일합니다.
System.Net
네임스페이스 내의 .NET 네트워킹 클래스는 지원되지 않습니다.
Unity는 네이티브 C/C++ 코드에 대해 멀티스레딩을 지원하지만, 웹 플랫폼은 WebAssembly의 제한으로 인해 아직 C# 멀티스레딩을 지원하지 않습니다. 따라서 웹 플랫폼을 사용하여 빌드된 애플리케이션은 단일 C# 스레드에서 실행되어야 합니다.
참고:
웹 플랫폼은 사용자가 웹 플레이어 설정에서 네이티브 C/C++ 지원을 활성화한 경우에만 C/C++ 멀티스레딩을 지원합니다.
웹 플랫폼은 문서가 보안 컨텍스트 내에 있을 때 멀티스레딩을 지원합니다.
다음 HTTP 응답 헤더를 서버에서 설정해야 합니다.
웹 플랫폼에서 복잡한 비동기 작업을 수행하는 데 권장되는 방법은 코루틴을 사용하는 것입니다. 자세한 내용은 코루틴 기술 자료를 참조하십시오.
멀티스레딩 지원을 제한하는 요인은 다음과 같습니다.
웹 플랫폼은 웹 브라우저에서 Unity 코드를 안전하고 효율적으로 실행하기 위한 바이트코드 포맷인 WebAssembly를 사용합니다. 웹 브라우저는 안전하고 격리된 환경에서 코드를 실행하도록 설계되어 네이티브 WebAssembly 스택에 대한 직접 액세스를 차단합니다. 웹 가비지 컬렉터는 다른 플랫폼에서 여러 프레임에 걸쳐 점진적으로 실행되지 않고 프레임이 끝날 때마다 한 번만 실행되므로, 이는 멀티스레드 가비지 컬렉션에 영향을 미칩니다.
웹의 백그라운드 워커는 서로 독립적으로 및 병렬로 코드를 실행합니다. 네이티브 플랫폼에서는 메인 스레드가 가비지 컬렉션을 위해 일시 중지하도록 다른 스레드에 신호를 동기적으로 보낼 수 있습니다. 웹에서는 이러한 동기식 시그널링이 지원되지 않으므로, WebAssembly로 컴파일된 C# 코드가 여러 스레드에서 실행되지 않습니다.