이번 강좌에서는 유니티(Unity) 엔진을 사용하여 간단한 네트워크 방을 만드는 기능을 구현하는 방법에 대해 알아보겠습니다. 유니티는 게임 개발에서 널리 사용되는 플랫폼이며, 최신 네트워킹 프레임워크를 통해 멀티플레이어 게임 개발이 더욱 쉬워졌습니다. 이 강좌에서는 유니티의 기본적인 사용법과 네트워크 기능을 다루고, 실제로 간단한 멀티플레이어 방을 생성하고 조작하는 방법을 설명합니다.
1. 프로젝트 설정
유니티를 시작하기 전에 먼저 프로젝트를 설정해야 합니다. 다음 단계에 따라 진행하세요:
- 유니티 허브(Unity Hub)를 실행하여 새 프로젝트를 생성합니다.
- 템플릿으로 ‘3D’를 선택하고, 프로젝트 이름을 적절히 지정합니다.
- ‘Create’ 버튼을 눌러 프로젝트를 생성합니다.
프로젝트를 생성한 후, 유니티의 편집기를 통해 기본적인 씬을 설정합니다. Hierarchy 창에서 우클릭하여 새 GameObject를 추가하고, Terrain을 선택하여 기본 지형을 생성해 줍니다.
2. 네트워킹 패키지 설치
유니티의 기본 네트워킹 기능은 유니티 패키지 매니저를 통해 설치할 수 있습니다. 아래의 단계를 따라 패키지를 설치합니다:
- Window > Package Manager를 선택합니다.
- plus(+) 버튼을 눌러 ‘Add package from Git URL’을 선택합니다.
- 아래의 URL을 입력하여 ‘Mirror’ 패키지를 추가합니다:
https://github.com/vis2k/Mirror.git
Mirror는 유니티에서 사용하기 위한 오픈소스 네트워킹 라이브러리입니다. 이 패키지를 통해 멀티플레이어 게임을 구현할 수 있습니다.
3. 네트워크 매니저 설정
네트워크 방 생성을 위해 NetworkManager를 설정해야 합니다. NetworkManager는 모든 네트워크 활동을 관리하는 중요한 컴포넌트입니다. 다음 단계에 따라 설정합니다:
- Hierarchy 창에서 빈 GameObject를 만들고 이름을 ‘NetworkManager’로 변경합니다.
- 이 GameObject에 ‘NetworkManager’ 컴포넌트를 추가합니다.
- 또한, ‘NetworkManagerHUD’ 컴포넌트도 추가하여 기본 UI를 생성합니다.
이제 네트워크 방을 설정할 준비가 되었습니다. NetworkManagerHUD는 기본적으로 호스트를 만들거나 클라이언트를 연결하는 UI를 제공합니다.
4. 방 만들기 및 연결하기
게임 내에서 방을 만들고 연결하는 기능을 추가할 것입니다. 이를 위해 스크립트를 작성해야 합니다. 아래의 단계를 따라 진행하세요:
4.1 방 생성 스크립트 만들기
- Project 창에서 Scripts 폴더를 만들고, 그 안에 ‘RoomManager.cs’ 파일을 생성합니다.
- 아래의 코드를 입력하여 방 생성 기능을 구현합니다:
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와 스크립트 연결하기
- NetworkManagerHUD의 ‘OnHostButton’을 클릭했을 때 CreateRoom 메소드가 호출되도록 연결합니다.
- ‘OnClientButton’ 클릭 시 JoinRoom 메소드가 호출되도록 설정합니다.
5. 플레이어 프리팹 설정
플레이어가 방에 입장했을 때, 어떤 오브젝트가 생성될지를 설정해야 합니다. 플레이어 프리팹을 설정하는 방법은 다음과 같습니다:
- 새로운 GameObject를 만들고 ‘Player’라고 이름을 지정합니다.
- 이 GameObject에 ‘NetworkIdentity’ 컴포넌트를 추가하고, ‘Local Player Authority’를 체크합니다.
- 이 GameObject를 Prefab으로 만들어 Resources 폴더에 저장합니다.
- RoomManager 스크립트에 아래 코드를 추가하여 플레이어 프리팹을 설정합니다:
public GameObject playerPrefab;
public override GameObject OnStartPlayer(NetworkConnection conn)
{
return Instantiate(playerPrefab);
}
6. 테스트 및 디버깅
모든 설정이 완료되었으니, 이제 테스트를 수행할 차례입니다. 네트워크 방 생성과 클라이언트 연결이 제대로 작동하는지 확인해보세요:
- 유니티 에디터에서 ‘Play’ 버튼을 눌러 서버를 시작합니다.
- 새로운 Unity 에디터 인스턴스를 실행하여 클라이언트를 연결합니다.
- 서버와 클라이언트의 콘솔에서 로그를 확인하여 연결 상태를 검증합니다.
7. 결론
이제 간단한 네트워크 방을 만들고 연결하는 기본적인 기능을 구현했습니다. 이를 통해 멀티플레이어 게임 개발의 기초를 이해했으며, 앞으로 더 복잡한 네트워킹 기능을 추가하는 데 필요한 단계를 배웠습니다.
이 강좌를 통해 이해한 내용을 바탕으로 더 나아가서 다음과 같은 기능을 확장해 볼 수 있습니다:
- 방 목록 보기 기능 구현
- 음성 채팅 또는 텍스트 채팅 기능 추가
- 맞춤형 플레이어 캐릭터 스폰 기능 구현
유니티에서의 네트워크 개발은 무궁무진한 가능성을 가지고 있습니다. 앞으로도 다양한 실습과 실험을 통해 멀티플레이어 게임 개발의 즐거움을 경험해 보시기 바랍니다.