참고: UNet은 지원이 중단되었으며 향후 Unity에서 삭제될 예정입니다. 현재 새로운 시스템이 개발 중입니다. 자세한 내용과 다음 단계는 이 블로그 포스트를 참조하십시오. |
Network Discovery 컴포넌트를 이용하면 Unity 멀티플레이어 게임이 로컬 영역 네트워크(LAN)에서 서로를 찾을 수 있습니다. 다시 말해, 플레이어가 호스트의 IP 주소를 찾지 않아도 LAN에서 게임에 연결할 수 있습니다. Network Discovery는 인터넷이 아닌 로컬 네트워크에서만 동작합니다. 인터넷 기반 게임에 대한 자세한 내용은 매치메이커 서비스를 참조하십시오.
Network Discovery 컴포넌트는 자신의 존재를 브로드캐스트하고, 다른 Network Discovery 컴포넌트의 브로드캐스트를 수신할 수 있으며, 원하는 경우 Network Manager를 사용하여 매치된 게임에 참가할 수 있습니다. Network Manager 컴포넌트는 네트워크 전송 레이어의 UDP 브로드캐스트 기능을 사용합니다.
로컬 네트워크 발견을 사용하려면 빈 게임 오브젝트를 씬 안에 생성하고 Network Discovery 컴포넌트를 추가해야 합니다.
Network Manager HUD와 마찬가지로 이 컴포넌트에는 제어를 위한 게임뷰에 표시되는 기본 GUI가 있는데, 이는 임시 개발 작업을 위한 것으로 사용자가 게임 제작을 마치기 전에 이에 대한 고유의 대체물을 만들 것이라는 가정에 기반합니다. 따라서 Network Discovery GUI를 통해 게임에 참가하려면 씬에 Network Manager 컴포넌트도 필요합니다. 게임이 시작할 때 게임뷰의 Network Discovery GUI에서 Initialize Broadcast 버튼을 클릭하면 브로드캐스트를 보내고 로컬 네트워크에 있는 다른 게임을 찾기 시작합니다.
Network Discovery 컴포넌트는 서버 모드(GUI의 “Start Broadcasting” 버튼을 클릭하여 활성화) 또는 클라이언트 모드(GUI의 ‘Listen for Broadcast’ 버튼을 클릭하여 활성화)에서 동작할 수 있습니다.
서버 모드에서 Network Discovery 컴포넌트는 인스펙터에서 지정된 포트의 네트워크를 통해 브로드캐스트 메시지를 전송합니다. 이 메시지에는 브로드캐스트 키와 게임의 브로드캐스트 버전이 들어 있습니다. 이를 원하는 값으로 설정할 수 있습니다. 이 값의 목적은 게임의 특정 버전 및 릴리스를 식별하여 충돌(예: 게임이 다른 타입의 게임에 참가하려고 시도하는 경우)을 피합니다. 예전 버전의 게임에 연결할 수 없는 새 게임 빌드를 릴리스할 때 브로드캐스트 키 값을 변경해야 합니다. 게임이 해당 장치에서 호스팅되는 경우 컴포넌트는 서버 모드에서 실행되어야 합니다. 기본 GUI가 없으면 StartAsServer() 함수를 호출하여 컴포넌트가 서버 모드에서 동작하게 만들어야 합니다.
클라이언트 모드에서 Network Discovery 컴포넌트는 특정 포트로부터 브로드캐스트 메시지를 수신합니다. 메시지를 전달받고 메시지의 브로드캐스트 키가 Network Discovery 컴포넌트의 브로드캐스트 키와 일치하면 게임이 로컬 네트워크에서 참가할 수 있다는 의미입니다. 기본 GUI를 사용하지 않는 경우 StartAsClient() 함수를 호출하여 컴포넌트가 클라이언트 모드에서 동작하게 만들어야 합니다.
기본 GUI를 사용하고 클라이언트 모드에서 브로드캐스트를 수신할 때 게임이 로컬 네트워크에서 발견되는 경우 해당 클라이언트의 사용자가 게임에 참가할 수 있도록 허용하는 버튼이 나타납니다. 이 버튼에는 “Game at:”이라는 레이블이 지정되어 있고 뒷부분에 호스트의 IP 주소가 붙습니다.
Network Discovery 컴포넌트에는 브로드캐스트 메시지를 수신했을 때 알림을 받도록 구현할 수 있는 가상 함수가 있습니다.
public class MyNetworkDiscovery: NetworkDiscovery {
public override void OnReceivedBroadcast(string fromAddress, string data)
{
Debug.Log("Received broadcast from: " + fromAddress+ " with the data: " + data);
}
}
자세한 내용은 Network Discovery에 대한 스크립팅 API 레퍼런스 문서를 참조하십시오. Network Discovery 서버 및 클라이언트는 동시에 동일한 프로세스에서 실행할 수 없습니다.