유니티 기초 강좌: 네트워크 방 목록 띄우기

1. 서론

게임 개발에서 멀티플레이어 기능은 다양한 경험을 제공합니다. 이번 강좌에서는 유니티를 사용하여 네트워크 방 목록을 띄우는 방법에 대해 알아보겠습니다. 이 강좌는 초보자를 위해 작성되었으며, 기본적인 유니티 사용법과 C# 프로그래밍에 대한 이해를 바탕으로 합니다.

2. 유니티와 네트워킹

유니티에서는 여러 가지 네트워킹 솔루션을 제공합니다. UNet(유니티 네트워크)은 그중 하나로, 기본적인 멀티플레이어 환경을 설정하는 데 유용합니다. 2020년 유니티 2020.1부터 UNet는 사용 중지되었으며, 대신 새로운 네트워킹 프레임워크인 MLAPI가 도입되었습니다. 본 강좌에서는 MLAPI를 중심으로 설명하겠습니다.

3. 준비하기

3.1. 유니티 설치

유니티를 설치하려면, 유니티 허브를 다운로드하고 원하는 유니티 버전을 설치합니다. MLAPI는 유니티 2019.4 이상에서 지원됩니다.

3.2. MLAPI 패키지 추가하기

프로젝트에 MLAPI를 추가하기 위해서는 Unity Package Manager를 사용합니다. 유니티 에디터에서 ‘Window’ -> ‘Package Manager’를 선택한 후, ‘Add package from git URL…’을 선택하고 https://github.com/Unity-Technologies/Mirror.git를 입력합니다.

4. 새로운 유니티 프로젝트 생성하기

새로운 유니티 프로젝트를 생성하여, 3D 템플릿을 선택합니다. 프로젝트가 생성되면, 필요한 모든 에셋과 네트워킹 관련 스크립트를 추가할 준비가 완료됩니다.

5. 씬 설정하기

새로운 씬을 만들어 기본 카메라와 조명을 추가합니다. 하늘 박스와 몇몇 3D 객체를 추가하여 테스트 환경을 구축합니다.

6. 네트워크 매니저 추가하기

네트워크를 관리하기 위해, 씬에 NetworkManager 컴포넌트를 추가합니다. NetworkManager는 네트워크 방을 생성하고 관리하는 역할을 합니다. 게임 오브젝트 생성 후, 아래와 같은 설정을 합니다.

NetworkManager manager = gameObject.AddComponent<NetworkManager>();

7. 방 목록 띄우기 위한 UI 설정하기

7.1. UI 요소 추가하기

UI에서 방 목록을 표시하기 위해 Canvas를 추가하고, TextButton 요소를 사용하여 방 목록을 띄울 UI를 구성합니다.

7.2. UI 스크립트 작성하기

방 목록을 띄우기 위한 스크립트를 작성합니다. 아래는 방 정보를 가져오기 위한 기본 코드의 예시입니다.


using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
using System.Collections.Generic;

public class RoomList : MonoBehaviour
{
    public GameObject roomButtonPrefab;
    public Transform roomListContainer;

    void Start()
    {
        NetworkManager.singleton.OnMatchList += OnMatchList;
        NetworkManager.singleton.ListMatches(0, 20, "", OnMatchList);
    }

    void OnMatchList(bool success, string extendedInfo, List matches)
    {
        foreach (Transform child in roomListContainer)
        {
            Destroy(child.gameObject);
        }

        if (success)
        {
            foreach (var match in matches)
            {
                Instantiate(roomButtonPrefab, roomListContainer).GetComponentInChildren().text = match.name;
            }
        }
    }
}

8. 네트워크 방 생성하기

사용자가 버튼을 클릭하여 방을 생성할 수 있도록 추가적인 기능도 개발이 필요합니다. 아래와 같은 함수를 추가하여 방 생성을 구현합니다.


public void CreateRoom()
{
    NetworkManager.singleton.StartMatchMaker();
    NetworkManager.singleton.matchMaker.CreateMatch("RoomName", 2, true, "", "", "", 0, 0, OnMatchCreate);
}

void OnMatchCreate(bool success, string extendedInfo, MatchInfo match)
{
    if (success)
    {
        NetworkManager.singleton.StartHost();
    }
}

9. 방에 참가하기

사용자가 방에 참가할 수 있도록 UI 버튼을 추가하고, 아래와 같은 코드를 통해 방에 참가하는 기능을 추가합니다.


public void JoinRoom(MatchInfoSnapshot match)
{
    NetworkManager.singleton.StartMatchMaker();
    NetworkManager.singleton.matchMaker.JoinMatch(match.networkId, "", OnMatchJoin);
}

void OnMatchJoin(bool success, string extendedInfo, MatchInfo match)
{
    if (success)
    {
        NetworkManager.singleton.StartClient();
    }
}

10. 테스트 및 디버깅

모든 스크립트와 UI가 완성되면, 유니티 에디터에서 멀티플레이어 기능을 테스트합니다. 방을 생성하고, 다른 클라이언트에서 방 목록을 확인하여 정상적으로 작동하는지 점검합니다.

11. 마무리

이 강좌를 통해 유니티에서 네트워크 방 목록을 띄우는 방법을 배웠습니다. 추가적인 기능으로는 방 삭제, 방 정보 수정 및 UI 개선 등을 통해 더 나은 사용자 경험을 제공할 수 있습니다. 앞으로도 계속해서 유니티 및 네트워킹에 대한 심층적인 내용을 다룰 계획입니다.

12. 참고 자료