어몽어스 - 네트워크

본 포스트는 베르님의 Make the 어몽어스를 정리한 포스트입니다.
https://www.youtube.com/watch?v=BxDWOt_soys&list=PLYQHfkihy4Aw6QjsZqwwbD4ihpwvm7N0U&index=6

이번 시간에는 게임 룸을 만들기 위한 세팅을 진행합니다.

1. API(Mirror) 다운로드

네트워크 구현을 위해 해당 API를 다운받아야 합니다. 이번 프로젝트에서는 MIRROR을 사용합니다.
상단의 Windows에서 Asset store에 들어간 후 mirror를 검색하여 에셋에 추가하고 unity editor로 열어 download 및 import를 진행합니다.

2. Room manager 생성

API import가 끝나면 먼저 room manager를 만들어야 하며, 이를 위해 다음의 AmongUsRoomManager C# 스크립트를 생성합니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mirror; // mirror api 사용 위해 선언

public class AmongUsRoomManager : NetworkRoomManager
{

}
  • room manager는 다음의 3단 구조로 room을 관리하면서 네트워크 통신에 도움을 주는 클래스입니다.

    offline scene -> game room scene -> game play scene

3. Scene 세팅하기

다음으로 해당 script를 새로운 게임 오브젝트(AmongUsRoomManager)를 생성하여 component로 추가해줍니다. 추가를 하고 나면 다양한 property를 볼 수 있습니다. offline scene에는 이전에 작업해오던 MainMenuScene을 추가해주고 online scene에는 이후에 작업할 game room scene을 새로 생성하여 넣어줍니다.

  • offline scene은 게임을 위한 네트워크에 접속하지 않은 scene을 의미합니다. (main menu scene)
  • online scene은 게임 네트워크에 접속한 후 실제 게임이 시작되기 전 대기실 scene을 의미합니다. (game room scene)

바로 하단의 Room Settings에는 Room Scene과 Gameplay Scene이 있습니다. Room scene에는 이전에 online scene과 동일하게 game room scene을 넣어주고 Gameplay scene에는 새로운 씬을 생성하여 넣습니다.

  • Room Scene은 플레이어가 접속해서 게임이 준비되기 기다리는 대기실의 scene을 의미합니다.
  • Gameplay Scene은 실제로 유저가 게임을 플레이하는 멀티 플레이 scene을 의미합니다.

3. 플레이어 Prefab 세팅

먼저 Room player prefab을 세팅하겠습니다. Room Player Prefab은 게임 대기실에 입장한 player의 오브젝트를 의미합니다. 해당 오브젝트를 통해 대기실에 입장한 플레이어의 정보를 저장하고 통신을 주고받게 됩니다. 이 prefab을 만들기 위해 AmongUsRoomPlayer라는 이름으로 새로운 스크립트를 생성합니다.

  • Room player prefab은 게임이 시작되기 전 대기실에서 플레이어가 서버와 상호작용하기 위함입니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mirror; // 선언

public class AmongUsRoomPlayer : NetworkRoomPlayer
{
  
}

위와 동일하게 새로운 오브젝트(create empty)를 만들고 해당 오브젝트에 방금 생성한 스크립트를 컴포넌트로 붙입니다. 이후 prefabs 폴더 안에 해당 오브젝트를 드래그 하여 prefab으로 만든 후 원본 object를 삭제합니다.

이렇게 생성된 room player prefab을 Room manager의 Room Player Prefab으로 할당합니다. 그러면 게임 대기실이 만들어지고 플레이어가 접속하게 될 때 room manager가 room player prefab을 인스턴스화해서 플레이어에게 할당해주고, 해당 오브젝트를 통해 필요한 통신을 하게 됩니다.

다음으로는 Player prefab을 세팅하겠습니다. 먼저 AmongUsGamePlayer로 새로운 스크립트를 생성합니다.

  • Player prefab은 게임이 시작된 후 game play scene에서 플레이어가 서버와 상호작용하기 위함입니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mirror; // 선언

public class AmongUsGamePlayer : NetworkBehaviour
{

}

앞의 room player와 동일하게 새로운 오브젝트를 생성하여 스크립트를 컴포넌트로 붙여준 후 prefab화하고 오브젝트를 삭제합니다. 다음으로 Room manager의 Player Object의 Player Prefab에 game player prefab을 넣어줍니다.

4. 게임 방 생성

이제 방을 생성하고 호스트 서버를 여는 기능을 구현하겠습니다. 이전에 만들었던 Online UI의 Scripts 폴더 안 CreateRoomUI 스크립트를 엽니다. 앞선 코드들과 동일하게 Mirror 네임 스페이스를 using 선언한 후 다음의 코드를 하단에 추가합니다.

public void CreateRoom(){
        var manager = AmongUsRoomManager.singleton; // scene에 있는 네트워크 매니저를 가져와서 StartHost를 호출하도록 함
        // 만들고자 하는 방 설정 작업 처리 (추후 구현)
        //
        manager.StartHost(); // 서버를 여는 동시에 클라이언트로 게임에 참가하도록 만들어주는 함수

    }

다음으로 Hierarchy 창에서 Create Room UI > Confirm Button에서 On click()에 Create Room UI를 추가한 후 CreateRoom() 함수를 지정합니다.

이후 File > Build Settings를 열어, 만들었던 scene들을 다음과 같이 추가합니다.

이후 게임을 실행하면 다음과 같이 동작하는 것을 확인할 수 있습니다.

(MainMenuScene) 온라인 > 닉네임 입력 후 방 만들기 > 확인 > Ready

  • 확인 버튼을 누르면 CreateRoom() 함수가 호출이 되어 호스트로 서버가 열리게 되며 GameRoomScene으로 이동하게 됩니다. 또한, Room player 오브젝트가 플레이어에게 할당되어 생성됩니다.
  • Ready 버튼을 누르면 GamePlayScene으로 이동하게 되고 Game player 오브젝트가 생성됩니다.

좋은 웹페이지 즐겨찾기