보안 문제 때문에, JavaScript 코드는 네트워크 연결을 구현하기 위해 IP 소켓에 직접 액세스할 수 없습니다. 그 결과, .NET 네트워킹 클래스(특히, System.Net.Sockets
등 System.Net
네임스페이스에 있는 모든 것)는 WebGL에서 작동하지 않습니다. 동일한 사항이 Unity의 이전 UnityEngine.Network*
클래스에도 적용되며, WebGL 빌드 시 사용할 수 없습니다.
WebGL에서 네트워킹을 사용해야 하는 경우, 현재 Unity 버전에서 WWW
또는 UnityWebRequest
클래스나 WebGL을 지원하는 새로운 Unity 네트워킹 기능을 사용해야 합니다. JavaScript에서 WebSockets 또는 WebRTC을 사용하여 자체 네트워킹을 구현하는 옵션 중에서도 선택할 수 있습니다.
WWW 및 UnityWebRequest 클래스는 WebGL에서 지원됩니다. JavaScript에서 XMLHttpRequest
클래스를 사용하여 구현되며, 브라우저를 사용하여 WWW 요청을 처리합니다. 크로스 도메인 리소스 액세스에 대한 몇 가지 보안 제한이 가해질 수 있습니다. 기본적으로 WebGL 콘텐츠를 호스트하는 서버 이외의 다른 서버로 보내는 WWW 요청은 액세스하려는 서버에서 허가해야 합니다. WebGL에서 크로스 도메인 WWW 리소스에 액세스하려면 액세스하려는 서버에서 CORS를 사용하여 요청을 허가해야 합니다.
WWW
또는 UnityWebReqest
를 사용하여 콘텐츠에 액세스하려고 하는 경우 원격 서버에 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.
CORS는 Cross-Origin Resource Sharing의 약자입니다. 설명은 여기를 참조하십시오. 기본적으로 서버는 발송하는 http 리스폰스에 웹 페이지에서 서버의 콘텐츠에 액세스할 수 있게 허용해도 됨을 브라우저에 알리는 Access-Control
헤더를 몇 개 추가해야 합니다. 다음은 헤더 설정의 예로, 이 설정을 통해 Unity WebGL에서 공통 요청 헤더로 http 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": "*",
WWW.responseHeader는 CORS 사양의 7.1.1에 따라 실제 리스폰스 헤더의 서브셋으로 제한됩니다.
또한 XMLHttpRequest는 데이터 스트리밍을 허용하지 않으므로 WebGL에서 WWW 클래스는 다운로드가 완료된 후에만 데이터를 처리합니다. 따라서 다른 플랫폼처럼 다운로드 중에 AssestBundle의 압축을 풀고 로드할 수 없습니다.
다음과 같이 WWW 또는 WebRequest 다운로드를 차단하는 코드를 사용하지 말아야 합니다.
while(!www.isDone) {}
Unity WebGL에서는 WWW 또는 WebRequest 다운로드를 차단할 수 없습니다. WebGL은 단일 스레드로 구성되어 있고 JavaScript에서 XMLHttpRequest
클래스는 비동기적이므로 브라우저에 컨트롤을 반환하지 않는 이상 다운로드가 끝나지 않으며 콘텐츠가 교착 상태에 빠지게 됩니다. 이 경우 코루틴과 yield
구문을 사용하여 다운로드가 끝날 때까지 기다리는 방법으로 문제를 해결할 수 있습니다.
Unity 네트워킹은 웹소켓 프로토콜을 통해 커뮤니케이션을 활성화하여 WebGL을 지원합니다. Networking.NetworkManager.useWebSockets 를 참조하십시오.
위에서 설명한 바와 같이, WebGL에서는 IP 소켓에 직접 접근할 수 없습니다. 하지만 WWW 클래스가 지원하는 네트워킹 성능 이상이 필요한 경우 브라우저가 지원하는 네트워킹 프로토콜인 Web Sockets나 WebRTC를 사용할 수 있습니다. Web Sockets는 호환성이 좋지만 WebRTC는 브라우저와 신뢰 불가능한 연결 간 P2P 연결을 할 수 있도록 지원합니다. 이 두 가지 프로토콜은 아직 Unity의 빌트인 API를 통해 노출되지 않지만, JavaScript 플러그인을 사용하여 구현할 수 있습니다. Unity WebGL에서 WebSocket 네트워킹을 구현하는 플러그인 샘플은 에셋 스토어에서 확인할 수 있습니다.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.