Version: Unity 6.0 (6000.0)
언어 : 한국어
웹 브라우저에서 기기 기능에 액세스
WebAssembly 2023

웹 네트워킹

다음 두 가지 방법으로 웹에서 네트워킹을 사용할 수 있습니다.

웹에서 UnityWebRequest 클래스 사용

Unity는 웹에서 UnityWebRequest 클래스를 지원합니다. UnityWebRequest 클래스를 구현하기 위해 Unity는 브라우저를 사용하여 웹 요청을 처리하는 JavaScript Fetch API를 사용합니다. 따라서 크로스 도메인 리소스에 대한 액세스에 보안 제한이 적용됩니다.

Unity 콘텐츠를 호스팅하는 서버가 아닌 다른 서버로 웹 요청을 전송하는 경우 전송 대상 서버에서 Unity 콘텐츠를 승인해야 합니다.

웹에서 크로스 도메인 웹 리소스에 액세스하려면 액세스 대상 서버가 CORS(Cross-Origin Resource Sharing)를 사용하여 크로스 도메인 웹 리소스를 승인해야 합니다.

UnityWebRequest를 사용하여 콘텐츠에 액세스하려고 하는 경우 원격 서버에 CORS가 설정되어 있지 않거나 올바르게 설정되어 있지 않으면 다음과 같은 오류가 브라우저 콘솔에 표시됩니다.

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://myserver.com/. This can be fixed by moving the resource to the same domain or enabling CORS.

서버는 전송하는 http 리스폰스에 Access-Control 헤더를 추가해야 합니다. 그래야만 어느 웹 페이지가 웹 브라우저에서 해당 정보를 읽을 권한이 있는지 나타낼 수 있습니다.

Unity Web이 모든 원점에서 웹 서버의 리소스에 액세스할 수 있도록 액세스 제어 헤더를 추가하는 방법에 대한 설명은 다음 예시를 참조하십시오. 이 예시에는 일반적인 요청 헤더가 포함되어 있으며 GET, POST, OPTIONS 메서드를 사용할 수 있습니다.

"Access-Control-Allow-Credentials": "true",
"Access-Control-Allow-Headers": "Accept, X-Access-Token, X-Application-Name, X-Request-Sent-Time",
"Access-Control-Allow-Methods": "GET, POST, OPTIONS",
"Access-Control-Allow-Origin": "*",

UnityWebRequest 다운로드

다음과 같이 UnityWebRequest 다운로드를 차단하는 코드는 사용하지 마십시오.

while(!www.isDone) {}

웹 브라우저는 네트워크 전송을 기다리기 위해 동기식으로 코드 실행을 차단할 수 없습니다. 따라서 동기식 UnityWebRequest를 수행해야 하는 경우 Coroutine과 yield 문을 사용하여 다운로드가 완료될 때까지 기다립니다. 자세한 내용은 UnityWebRequest를 사용하는 코루틴 예시를 참조하십시오.

Unity Netcode 네트워킹 패키지 사용

웹 브라우저는 보안 제한으로 인해 TCP 또는 UDP 소켓에 대한 직접 액세스를 허용하지 않습니다. 대신 웹 플랫폼을 지원하는 Unity Netcode 네트워킹 패키지를 사용할 수 있습니다. 자세한 내용은 Netcode for GameObjects 정보(Unity 멀티플레이어 네트워킹 기술 자료)를 참조하십시오.

웹 브라우저 네트워킹 표준에 대한 자세한 내용은 다음을 살펴보십시오.

웹 네트워킹의 한계

웹 플랫폼이 지원하지 않는 네트워킹 기능이 몇 개 있습니다.

.NET 네트워킹 클래스 지원 안 함

JavaScript 코드가 네트워크 연결을 구현하기 위해 IP(인터넷 프로토콜) 소켓에 직접 액세스할 수 없으므로 웹 플랫폼 내에서 .NET 네트워킹 클래스를 사용할 수 없습니다. 특히 웹은 System.Net 네임스페이스 내에서 .NET 클래스를 지원하지 않습니다.

네이티브 소켓 액세스에 대한 지원 안 함

웹 플랫폼은 브라우저 내부의 보안 제한으로 인해 네이티브 소켓 액세스를 지원하지 않습니다. 따라서 웹은 UnityEngine.Ping(ICMP) 같은 기능도 지원하지 않습니다.

웹 브라우저에서 기기 기능에 액세스
WebAssembly 2023