유니티 기초 강좌: 네트워크 방 만들기 기능 구현

이번 강좌에서는 유니티(Unity) 엔진을 사용하여 간단한 네트워크 방을 만드는 기능을 구현하는 방법에 대해 알아보겠습니다. 유니티는 게임 개발에서 널리 사용되는 플랫폼이며, 최신 네트워킹 프레임워크를 통해 멀티플레이어 게임 개발이 더욱 쉬워졌습니다. 이 강좌에서는 유니티의 기본적인 사용법과 네트워크 기능을 다루고, 실제로 간단한 멀티플레이어 방을 생성하고 조작하는 방법을 설명합니다.

1. 프로젝트 설정

유니티를 시작하기 전에 먼저 프로젝트를 설정해야 합니다. 다음 단계에 따라 진행하세요:

  1. 유니티 허브(Unity Hub)를 실행하여 새 프로젝트를 생성합니다.
  2. 템플릿으로 ‘3D’를 선택하고, 프로젝트 이름을 적절히 지정합니다.
  3. ‘Create’ 버튼을 눌러 프로젝트를 생성합니다.

프로젝트를 생성한 후, 유니티의 편집기를 통해 기본적인 씬을 설정합니다. Hierarchy 창에서 우클릭하여 새 GameObject를 추가하고, Terrain을 선택하여 기본 지형을 생성해 줍니다.

2. 네트워킹 패키지 설치

유니티의 기본 네트워킹 기능은 유니티 패키지 매니저를 통해 설치할 수 있습니다. 아래의 단계를 따라 패키지를 설치합니다:

  1. Window > Package Manager를 선택합니다.
  2. plus(+) 버튼을 눌러 ‘Add package from Git URL’을 선택합니다.
  3. 아래의 URL을 입력하여 ‘Mirror’ 패키지를 추가합니다:
  4. https://github.com/vis2k/Mirror.git

Mirror는 유니티에서 사용하기 위한 오픈소스 네트워킹 라이브러리입니다. 이 패키지를 통해 멀티플레이어 게임을 구현할 수 있습니다.

3. 네트워크 매니저 설정

네트워크 방 생성을 위해 NetworkManager를 설정해야 합니다. NetworkManager는 모든 네트워크 활동을 관리하는 중요한 컴포넌트입니다. 다음 단계에 따라 설정합니다:

  1. Hierarchy 창에서 빈 GameObject를 만들고 이름을 ‘NetworkManager’로 변경합니다.
  2. 이 GameObject에 ‘NetworkManager’ 컴포넌트를 추가합니다.
  3. 또한, ‘NetworkManagerHUD’ 컴포넌트도 추가하여 기본 UI를 생성합니다.

이제 네트워크 방을 설정할 준비가 되었습니다. NetworkManagerHUD는 기본적으로 호스트를 만들거나 클라이언트를 연결하는 UI를 제공합니다.

4. 방 만들기 및 연결하기

게임 내에서 방을 만들고 연결하는 기능을 추가할 것입니다. 이를 위해 스크립트를 작성해야 합니다. 아래의 단계를 따라 진행하세요:

4.1 방 생성 스크립트 만들기

  1. Project 창에서 Scripts 폴더를 만들고, 그 안에 ‘RoomManager.cs’ 파일을 생성합니다.
  2. 아래의 코드를 입력하여 방 생성 기능을 구현합니다:
  3. using UnityEngine;
    using Mirror;
    
    public class RoomManager : NetworkManager
    {
        public override void OnStartServer()
        {
            Debug.Log("서버 시작");
        }
        
        public override void OnStartClient()
        {
            Debug.Log("클라이언트 연결");
        }
    
        public void CreateRoom()
        {
            NetworkServer.Listen(7777);
            Debug.Log("방 생성 완료");
        }
    
        public void JoinRoom()
        {
            NetworkClient.Connect("127.0.0.1", 7777);
            Debug.Log("방에 연결 중...");
        }
    }

4.2 UI와 스크립트 연결하기

  1. NetworkManagerHUD의 ‘OnHostButton’을 클릭했을 때 CreateRoom 메소드가 호출되도록 연결합니다.
  2. ‘OnClientButton’ 클릭 시 JoinRoom 메소드가 호출되도록 설정합니다.

5. 플레이어 프리팹 설정

플레이어가 방에 입장했을 때, 어떤 오브젝트가 생성될지를 설정해야 합니다. 플레이어 프리팹을 설정하는 방법은 다음과 같습니다:

  1. 새로운 GameObject를 만들고 ‘Player’라고 이름을 지정합니다.
  2. 이 GameObject에 ‘NetworkIdentity’ 컴포넌트를 추가하고, ‘Local Player Authority’를 체크합니다.
  3. 이 GameObject를 Prefab으로 만들어 Resources 폴더에 저장합니다.
  4. RoomManager 스크립트에 아래 코드를 추가하여 플레이어 프리팹을 설정합니다:
  5. public GameObject playerPrefab;
    
        public override GameObject OnStartPlayer(NetworkConnection conn)
        {
            return Instantiate(playerPrefab);
        }

6. 테스트 및 디버깅

모든 설정이 완료되었으니, 이제 테스트를 수행할 차례입니다. 네트워크 방 생성과 클라이언트 연결이 제대로 작동하는지 확인해보세요:

  1. 유니티 에디터에서 ‘Play’ 버튼을 눌러 서버를 시작합니다.
  2. 새로운 Unity 에디터 인스턴스를 실행하여 클라이언트를 연결합니다.
  3. 서버와 클라이언트의 콘솔에서 로그를 확인하여 연결 상태를 검증합니다.

7. 결론

이제 간단한 네트워크 방을 만들고 연결하는 기본적인 기능을 구현했습니다. 이를 통해 멀티플레이어 게임 개발의 기초를 이해했으며, 앞으로 더 복잡한 네트워킹 기능을 추가하는 데 필요한 단계를 배웠습니다.

이 강좌를 통해 이해한 내용을 바탕으로 더 나아가서 다음과 같은 기능을 확장해 볼 수 있습니다:

  • 방 목록 보기 기능 구현
  • 음성 채팅 또는 텍스트 채팅 기능 추가
  • 맞춤형 플레이어 캐릭터 스폰 기능 구현

유니티에서의 네트워크 개발은 무궁무진한 가능성을 가지고 있습니다. 앞으로도 다양한 실습과 실험을 통해 멀티플레이어 게임 개발의 즐거움을 경험해 보시기 바랍니다.