1월 06, 2016

유니티 5 네트워킹 시스템 HLAPI를 사용하여 LAN 멀티플레이 기본 틀 만들기

외부 인터넷을 거치지 않고, 로컬 와이파이만을 이용한 멀티 플레이를 구현하기 위해 유니티 매뉴얼을 보다가 좋은 재료를 발견하여 짧게 적어보겠습니다.

본 튜토리얼에서는 LAN 환경에서 네트워크 객체(유니티 애플리케이션)들이 서로의 존재를 인식하고, 접속하여 네트워크 메시지를 주고받고, 각종 콜백처리를 하기 위한 기본 틀을 구현해보겠습니다. 그리고 간단한 UI 구성을 위해 NGUI 를 사용하겠습니다.

유니티가 5.1 버전 이후로 새로운 네트워킹 시스템을 발표하여 이전보다 더 간편하고 쉽게 좋은 성능을 가진 멀티플레이를 구현할 수 있게 되었습니다.

NetworkManager 와 HLAPI(High-Level) 를 사용하여 시작할 수 있습니다.
간단하게 위의 한글 매뉴얼을 흝어보고 오시면 더 이해가 쉽습니다.

먼저 새 프로젝트를 만들고, 빈 게임 오브젝트 하나를 생성합니다.
원래는 'Add Component' 버튼을 눌러 NetworkManager 컴퍼넌트를 추가하는 것으로 끝나지만, 입맛대로 커스터마이징하기 위해 NetworkManager 를 상속한 사용자 정의 스크립트를 생성하겠습니다. 

새로운 C# 스크립트를 생성하여 MyNetManager 로 이름을 변경한 후 빈 게임 오브젝트에 붙입니다.

그리고 아래처럼 코딩해주세요.

using UnityEngine;
using System.Collections;
using UnityEngine.Networking; /* 유니티 네트워킹 API 입니다. */


public class MyNetManager : NetworkManager /* NetworkManager 를 상속합니다. */
{
    NetworkClient myClient;

    /* 확장 함수 */
    public override void OnStartServer() 
    {
        Debug.Log("OnStartServer( )");
    }

    public override void OnStartClient(NetworkClient client)
    {
        Debug.Log("OnStartClient( )");
    }

    public override void OnStopClient()
    {
        Debug.Log("OnStopClient( )");
    }

    /* 사용자 정의 함수 */
    public void SetupServer()
    {
        Debug.Log("SetupServer()");
        StartServer();     
        NetworkServer.Listen(4444);
        NetworkServer.RegisterHandler(MsgType.Connect, OnConnected);

}

    public void SetupClient()
    {
        Debug.Log("SetupClient()");
        StartClient();     

        myClient = new NetworkClient ();
        myClient.Connect("127.0.0.1", 4444);

    }
    public void OnConnected(NetworkMessage netMsg)
    {
        Debug.Log("Connected to server");
    }

}
OnStartServer( ), OnStartClient( ),OnStopClient( ) 는NetworkManager 를 확장한 메서드들입니다. 나중에 이 부분에서 서버를 구동시켰을 때, 클라이언트가 접속했을 때의 처리를 할 것입니다. 이 외의 여러 네트워크 이벤트를 처리할 수 있는 가상 함수들은 공식문서를 참조하시기 바랍니다. 
아래의  SetupServer( ), SetupClient( ) 메서드는 본 튜토리얼에서 NetworkManagerHUD(기본 GUI) 를 사용하지 않을 것이기 때문에 사용자 정의로 직접 서버를 구동하고 클라이언트를 접속시키는 코드를 작성하기 위해 만든 것입니다.
NetworkServer.RegisterHandler 메서드는 서버측에서 네트워크 이벤트를 처리할 처리기를 등록하고 있습니다. 위 코드는 클라이언트 접속시 발생할 이벤트를 처리합니다.
마지막으로 아래와 같이 각각 서버, 클라이언트 모드로 구동하기 위한 버튼을 두 개 배치합니다. 한쪽엔 버튼 클릭시 MyNetManager 의 SetupSever( )를, 다른 하나는 SetupClient( ) 가 실행되도록 클릭 이벤트를 연결합시다.
접속이 이루어졌는지 확인하기 위해, 유니티 에디터에서 서버를 실행하고, PC 버전으로 빌드하여 클라이언트로 실행해봅니다.
그러면 다음과 같이 클라이언트로 접속했을 때 콘솔창에 메시지가 뜨는 것을 볼 수 있습니다.
2편에서는 서버와 클라이언트가 연결 된 상태에서 서로 메시지를 주고받는 기능을 구현해보겠습니다.

댓글 없음:

댓글 쓰기

댓글