유니티 기초 강좌: 네트워크 로비 화면 – 방 만들기

안녕하세요! 오늘은 유니티(Unity)를 사용하여 간단한 네트워크 로비 화면을 만드는 방법에 대해 알아보겠습니다. 이 강좌에서는 방 만들기 기능을 구현하고, 사용자가 방에 입장하거나 생성할 수 있는 방법에 대해 설명할 것입니다. 네트워크 게임 개발의 기본적인 개념을 이해하고, 유니티의 네트워킹 기능을 활용하여 실습해봅시다.

1. 유니티와 네트워크

유니티는 강력한 게임 엔진으로, 네트워크 게임 개발을 위한 다양한 기능을 제공합니다. 유니티에서 제공하는 네트워킹 API인 UNET(Unity Networking)은 다양한 네트워크 기능을 간편하게 구현할 수 있도록 도와줍니다. 하지만 UNET은 더 이상 적극적으로 지원되지 않으며, 유니티의 새로운 네트워크 솔루션인 Mirror 또는 Photon을 사용하는 것이 좋습니다. 이번 강좌에서는 Mirror를 사용하여 네트워크 방을 만드는 데 초점을 맞추겠습니다.

2. 프로젝트 설정

유니티에서 새 프로젝트를 생성합니다. 프로젝트의 기본 템플릿은 3D로 설정하고, 프로젝트 이름은 ‘NetworkLobby’로 정해봅시다. 그러고 나서 다음의 단계를 진행해봅시다.

2.1 Mirror 패키지 설치

1. 유니티 에디터의 상단 메뉴에서 Window > Package Manager를 선택합니다.

2. + 버튼을 클릭하고 Install from git URL…을 선택합니다.

3. URL 입력란에 https://github.com/vis2k/Mirror.git를 입력합니다.

4. 설치가 완료되면 Mirror 패키지가 패키지 목록에 나타납니다.

2.2 기본 씬 설정

1. File > New Scene을 선택하여 새 씬을 생성합니다.

2. 기본적인 UI를 구성하기 위해 Canvas를 생성합니다. Hierarchy 창에서 右 클릭 > UI > Canvas를 선택하여 새로운 Canvas를 추가합니다.

3. Canvas 아래에 UI 요소를 추가합니다. 버튼, 입력 필드, 텍스트 등을 추가하여 로비 화면을 구성합니다.

3. 네트워크 매니저 설정

네트워크 게임의 핵심은 네트워크 매니저입니다. 네트워크 매니저는 클라이언트와 서버 간의 연결을 관리합니다. 이 과정에서는 네트워크 매니저를 설정하고, 방 관리를 위한 기본 코드를 작성할 것입니다.

3.1 NetworkManager 추가

1. Hierarchy 창에서, 右クリック > Network > NetworkManager를 선택하여 새로운 네트워크 매니저를 추가합니다.

2. NetworkManager 오브젝트를 선택하고 인스펙터에서 설정을 조정합니다. Spawn Info의 Fake Player Prefab을 제거하고, Transport 섹션에서 TelepathyTransport를 추가합니다.

3.2 커스텀 스크립트 작성

제어하는 스크립트를 작성하여 방을 만들고, 방에 입장하는 기능을 구현합니다. 새로운 C# 스크립트를 생성하고 NetworkLobbyManager.cs라는 이름을 붙입니다.

using Mirror;
using UnityEngine;
using UnityEngine.UI;

public class NetworkLobbyManager : NetworkManager
{
    public InputField roomNameInput;
    public Button createRoomButton;
    public Button joinRoomButton;

    public override void OnStartServer()
    {
        Debug.Log("Server started!");
    }

    public void CreateRoom()
    {
        if (string.IsNullOrEmpty(roomNameInput.text))
        {
            Debug.Log("Room name cannot be empty!");
            return;
        }
        // 방 만들기 처리
        Debug.Log("Room created: " + roomNameInput.text);
        NetworkServer.Listen(12345);
    }

    public void JoinRoom()
    {
        // 방 입장 처리
        Debug.Log("Joined room: " + roomNameInput.text);
        networkAddress = roomNameInput.text;
        StartClient();
    }

    public void OnEnable()
    {
        createRoomButton.onClick.AddListener(CreateRoom);
        joinRoomButton.onClick.AddListener(JoinRoom);
    }

    public void OnDisable()
    {
        createRoomButton.onClick.RemoveListener(CreateRoom);
        joinRoomButton.onClick.RemoveListener(JoinRoom);
    }
}

이 스크립트는 방을 생성하고 입장하는 기본적인 로직을 담고 있습니다. 사용자가 입력한 방 이름에 따라 방을 만들거나 해당 방에 입장할 수 있도록 구현합니다.

4. UI 구성

UI 요소들을 좀 더 세부적으로 구성하고 사용자 경험을 향상시키기 위해 UI 레이아웃과 스타일을 조정합니다.

4.1 Canvas 내부 구성

1. Canvas 아래에 Panel을 추가합니다. 이 패널은 로비의 주 배경이 될 것입니다.

2. 패널 위에 제목 텍스트를 추가합니다. (예: “게임 로비”)

3. 방 이름 입력 필드와 함께 방 만들기, 입장 버튼을 추가합니다.

4.2 버튼 이벤트 연결

방 만들기 및 입장 버튼을 네트워크 매니저의 메소드와 연결합니다. 유니티 에디터에서 버튼의 onClick() 이벤트에 관련 메소드를 할당합니다.

5. 테스트 및 디버깅

모든 기능이 구현되었다면, 최종 테스트를 진행해야 합니다. 여러 개의 유니티 에디터 인스턴스를 실행하여 클라이언트가 방을 만들고 입장할 수 있는지 확인합니다.

5.1 서버 실행

유니티 에디터에서 게임 시작 버튼을 클릭하여 서버를 실행합니다. 서버가 정상적으로 동작하는지 확인합니다.

5.2 클라이언트 실행

서버가 실행되고 있는 상태에서, 다른 인스턴스에서 클라이언트를 실행하고 방에 입장합니다. 이 과정을 통해 여러 클라이언트가 상호작용하는 모습을 확인합니다.

6. 마무리

이번 강좌에서는 유니티를 사용하여 간단한 네트워크 로비 화면을 만드는 방법을 알아보았습니다. Mirror를 사용하여 방을 만들고, 입장하는 기본적인 기능을 구현하였고, 간단한 UI 구성과 이벤트 처리를 통해 사용자 경험을 향상시킬 수 있는 방법도 보여주었습니다.

네트워킹 게임 개발은 배우면 배울수록 흥미로운 분야입니다. 이번 강좌를 통해 얻은 기초 지식을 바탕으로 더 복잡한 네트워크 시스템을 연구해보시기 바랍니다.

감사합니다!