Unity에서 Mirror 및 LiteNetLib4Mirror를 사용하여 네트워크 검색에 대한 설명

10695 단어 UnetmirrorUnity

입문


LiteNetLib4Mirror는 LiteNetLib라고 합니다.NET용 UDP 라이브러리를 Unity용 네트워크 라이브러리Mirror의 저전력 네트워킹 transport로 사용합니다.특히 Mirror에 없는 Network Discovery와 upnP를 지원하게 되어 기쁩니다. 그래서 이 부분을 중심으로 필기를 하겠습니다.또한 원고 집필 시 LiteNetLib4Mirror의 버전은 1.2.5입니다.

LiteNetLib4Mirror 가져오기


여기에서 UnityPackage를 다운로드하여 자신의 프로젝트로 가져오십시오.하지만 예시 장면이 포함되지 않기 때문에 초보자는 복제여기 저장소를 해 보는 것이 좋다.권장되는 Unity 버전은 Unity 2018.3.6f1 이상입니다.나는 집필할 때 Unity 2018.3.8f1을 사용했다.

예제 장면에서 배우기


공식 문서가 적기 때문에 예시 장면을 배워 보세요.
저장소를 복제하고 항목을 열 때 Asset 폴더에 Scene이라는 장면 파일이 있습니다.irror와 함께 제공되는 Pong 데모와 동일한 장면이 열립니다.

그러나 네트워크 관리자 게임 대상에 부착된 구성 요소는 다음과 같다.

LiteNetLib4MirrorTransport


irror의 Pong 프레젠테이션에 Telepathy Transport가 추가되었지만 여기에 LiteNetLib4 Mirror Transport가 추가되었습니다.이 구성 요소는 LiteNetLib4Mirror를 사용할 때 필요하며 Network Manager와 같은 게임 대상에 부착해야 합니다.

아래의 참고 자료는 구성 요소 매개 변수에 도움이 될 수 있습니다.
127.0.0.1과localhost와0.0.0.0의 차이
UPnP NAT 초월~ 온라인 게임 개발의 과제~

LiteNetLib4MirrorDiscovery


네트워크 검색에 사용되는 구성 요소입니다.검색 응답을 한 번 설정하면 호스트를 찾은 후에 처리할 수 있습니다.

NetworkDiscoveryHUD


이게 있으면 장면에'발견 시작'버튼이 표시되고 클라이언트 측에서 이 버튼을 누르면 호스트를 찾기 시작합니다.

Network Manager


이 구성 요소 자체는 Mirror의 Pong 데모에도 있지만 Network Info의 Transport는 LiteNetLib4MirrorTransport입니다.

해보다


먼저 프로젝트를 구축하고 시도해 보세요.두 개의 구축된 응용 프로그램을 시작합니다. 하나는 클라이언트이고 하나는 호스트입니다.호스트 측에서 "LAN 호스트"를 누르고 클라이언트 측에서 "검색 시작"을 누르며 연결 후 Pong을 시작합니다.

네트워크 검색 방법


예제 장면의 네트워크 검색 HUD.cs는 참고할 수 있습니다.여기서 OnGUI 방법에는 Discovery 작업을 시작하거나 중지하는 방법이 있습니다.코드의 _noDiscovering은 초기 상태에서 이루어집니다.
NetworkDiscoveryHUD.cs
//OnGUI内
if (!NetworkClient.isConnected && !NetworkServer.active){
    if (_noDiscovering){
        if (GUILayout.Button("Start Discovery")){
            StartCoroutine(StartDiscovery());
        }
    }
    else{
        GUILayout.Label("Discovering..");
        GUILayout.Label($"LocalPort: {LiteNetLib4MirrorTransport.Singleton.port}");
        if (GUILayout.Button("Stop Discovery")){
            _noDiscovering = true;
        }
    }
}
else{
    _noDiscovering = true;
}
검색 시작 버튼을 누르면 StartDiscovery 메서드가 코르크로 실행됩니다.
StartDiscovery 방법에서 LiteNetLib4MirrorDiscovery 구성 요소의 InitializeFinder()를 사용하여 Singleton을 초기화합니다.onDiscoveryResponse.AddListener에서 OnClientDiscoveryResponse를 이벤트 처리 프로그램으로 등록한 후 LiteNetLib4MirrorDiscovery.SendDiscoveryRequest에서 요청을 계속 전송합니다.
NetworkDiscoveryHUD.cs
private IEnumerator StartDiscovery()
{
    _noDiscovering = false;

    LiteNetLib4MirrorDiscovery.InitializeFinder();
    LiteNetLib4MirrorDiscovery.Singleton.onDiscoveryResponse.AddListener(OnClientDiscoveryResponse);
    while (!_noDiscovering)
    {
        LiteNetLib4MirrorDiscovery.SendDiscoveryRequest("NetworkManagerHUD");
        yield return new WaitForSeconds(discoveryInterval);
    }

    LiteNetLib4MirrorDiscovery.Singleton.onDiscoveryResponse.RemoveListener(OnClientDiscoveryResponse);
    LiteNetLib4MirrorDiscovery.StopDiscovery();
}
샘플에서 LiteNetLib4MirrorDiscovery 를 참조하십시오.SendDiscovery Request의 매개 변수는 "Network Manager HUD"이지만 다른 문자열을 줘도 동작에 영향을 주지 않습니다.이유 조사 중
(추기: shiena 씨의 논평에서 보듯이 주어진 매개 변수는 호스트 측에 전달된 LiteNetLib4MirrorDiscovery의 ProcessDiscovery Request와 같습니다. ProcessDiscovery Request에서 전달된 문자열을 사용하지 않기 때문에 어떤 것도 영향을 주지 않지만 LiteNetLib4MirrorDiscovery를 계승하는 클래스를 만들 때 이 문자열을 사용하여 처리합니다.태그 요소의 표시 속성을 수정합니다.)
어쨌든 발견된 호스트의 IP 주소는 등록된 OnClientDiscovery Response에 전달되므로 Mirror의 일반적인 방법으로 클라이언트를 시작할 수 있습니다.
NetworkDiscoveryHUD.cs
private void OnClientDiscoveryResponse(IPEndPoint endpoint, string text)
{
    string ip = endpoint.Address.ToString();
    NetworkManager.singleton.networkAddress = ip;
    NetworkManager.singleton.maxConnections = 2;
    LiteNetLib4MirrorTransport.Singleton.clientAddress = ip;
    LiteNetLib4MirrorTransport.Singleton.port = (ushort)endpoint.Port;
    LiteNetLib4MirrorTransport.Singleton.maxConnections = 2;
    NetworkManager.singleton.StartClient();
    _noDiscovering = true;
}

끝내다


나는 아마 더 많은 일을 할 수 있을 것이라고 생각하지만, 샘플에서 이해하는 것은 이것뿐이다.공식 샘플이 추가되면 저희도 추가 정보를 드리겠습니다.

좋은 웹페이지 즐겨찾기