This document is about: FUSION 2
SWITCH TO

수정중인 페이지 입니다.

전용 서버 샘플

Level
INTERMEDIATE

개요

Fusion 전용 서버 샘플전용 게임 서버 개념을 기반으로 Fusion 프로젝트를 어떻게 구성할 수 있는지를 보여줍니다. 즉, 게임의 헤드리스 인스턴스를 실행하여 게임 서버로 동작하도록 빌드 할 수 있습니다.

전용 서버는 단순히 서버 모드로 시작된 Fusion 피어일 뿐이며, 로컬 Player는 존재하지 않고 전체 Game State에 대한 상태 권한 역할을 수행합니다.
이 샘플은 인스턴스가 헤드리스 모드로 실행되는지 감지하여 자동으로 서버 모드로 시작하는 방법과, 클라이언트에서 간단한 메뉴를 통해 무작위 게임 세션에 참여하거나 로비에 접속해 특정 세션을 선택하는 방법을 보여줍니다.

시작하기 전에

샘플을 실행하려면 먼저 PhotonEngine 관리 화면에서 Fusion AppId를 생성하고, Fusion 메뉴에서 접근 가능한 Real Time 설정의 App Id Fusion 필드에 붙여 넣어야 합니다.

다운로드

VersionRelease DateDownload
2.0.67월 10, 2025Fusion Dedicated Server 2.0.6

프리팹

  • Server_NetworkRunner.prefab: 서버에서 사용하는 NetworkRunner 프리팹. 전체 게임을 관리하는 스크립트가 포함되어 있으며, 주요 스크립트는 아래에서 설명할 GameManager.
  • Server_Manager.prefab: 현재 인스턴스가 Headless Mode로 실행 중인지 확인하고 Server_NetworkRunner.prefab을 스폰 합니다. 또한 Fusion 서버를 커스터마이즈 하기 위한 명령줄 인자들을 처리합니다.
  • Client_NetworkRunner.prefab: 클라이언트에서 사용하는 NetworkRunner 프리팹. 플레이어 입력을 수집하는 역할도 수행합니다.
  • Client_Manager.prefab: 간단한 GUI를 통해 클라이언트가 특정 또는 무작위 세션에 접속하거나 로비에 입장해 세션 목록을 확인할 수 있게 합니다. Client_NetworkRunner.prefab을 사용합니다.
  • Player.prefab: 클라이언트가 게임에 접속하면 서버가 스폰 하는 간단한 플레이어 오브젝트.

  • 0.Launch: 실행 시 로드되는 씬. 헤드리스 모드에서는 Server_Manager.prefab을 통해 Game 씬을 로드하며, 일반 모드에서는 Menu 씬으로 전환됩니다.
  • 1.Menu: 클라이언트 전용 씬으로, Client_Manager.prefab이 제공하는 간단한 메뉴가 표시됩니다.
  • 2.Game: 기본 게임 씬으로, 플레이어가 스폰 되고 이동할 수 있습니다.

스크립트

  • SceneDefs: 씬 인덱스 목록을 관리하여 참조를 단순화합니다.
  • CommandLineUtils: 인스턴스가 Headless Mode(-batchmode -nographics)로 실행 중인지 확인하고, 명령줄에서 전달된 값을 가져오는 메서드 집합.
  • ServerManager: CommandLineUtils를 사용하여 Game Server를 시작할지, Menu 씬을 로드할지 결정합니다. 서버를 시작할 경우 다음 인자들을 로드할 수 있습니다:
    • -session: 서버에서 사용할 커스텀 세션 이름.
    • -region: 서버가 연결할 리전(Region). 지원 리전 목록.
    • -lobby: 세션을 생성할 커스텀 로비.
    • -port: 서버가 바인딩 할 포트 번호.
    • -P: 커스텀 속성 집합.
  • GameManager: 서버에서만 실행되며, 클라이언트가 참여/퇴장할 때 플레이어를 스폰/디스폰 합니다.
  • ServerEventsInfo: 서버 측에서 발생하는 일반적인 Fusion 이벤트들을 로깅 합니다.
  • ClientManager: 클라이언트 메뉴를 제어하고, Client_NetworkRunner.prefab을 사용해 게임 서버에 연결합니다.
  • PlayerController: 클라이언트 입력을 읽고 Player NetworkObject를 이동시킵니다.
  • InGameMenu: 클라이언트가 Game 씬에서 실행 중일 때 Shutdown 버튼을 표시합니다.

실행 방법

샘플을 실행하려면 Scenes in Build에 Launch, Menu, Game 씬이 순서대로 포함되어 있어야 합니다. 그래야 명령줄 인자를 확인해 서버 또는 클라이언트를 시작할 수 있습니다. 각 모드 실행 방법은 아래와 같습니다.

전용 서버 모드

이 모드에서는 게임 서버가 기본 설정 또는 명령줄로 전달된 커스텀 인자를 사용해 시작됩니다. 서버는 디스플레이나 그래픽 없이 실행되므로 필수 인자와 선택 인자가 있습니다.

게임 서버 빌드는 두 가지 주요 빌드 타깃을 가집니다:

  • 독립 빌드: Windows, Linux, macOS 등 주요 플랫폼용 실행 파일을 빌드 합니다. 단점: (i) 빌드에 모든 게임 에셋이 포함되고, (ii) 실행 시 백그라운드에서 돌아가므로 종료 시 프로세스를 강제로 종료해야 합니다.
  • Dedicated Server Build: Unity 2021.2+에서만 제공되며, 서버 전용으로 불필요한 파일을 제거하고 터미널과 더 나은 통합을 제공합니다. 자세한 내용은 Unity 포럼 글을 참조하세요.
만약 Build Target Platform을 (예: Standalone → Dedicated Server) 변경할 경우, 해당 타깃의 Scripting Define SymbolsFUSION_WEAVER 심볼이 정의되어 있는지 확인해야 합니다. 그렇지 않으면 Fusion이 프로젝트를 weave할 수 없습니다.

빌드가 위치한 폴더에서 터미널을 열고 다음을 실행합니다:


.\FusionDedicatedServerSample.exe -batchmode -nographics -logFile output.log

위 명령으로 게임 서버가 실행되며, 호스팅 머신의 위치를 기반으로 최적의 지역에 새로운 게임 세션을 기본 설정으로 생성 및 게시합니다.
각 인자의 의미는 다음과 같습니다:

  • -batchmode -nographics (필수): 유니티 인스턴스를 Headless Mode로 실행하며, 이는 Game Server 시작을 트리거 합니다.
  • -logFile output.log (선택): 서버 로그를 output.log 파일에 기록합니다.

위 인자들은 모두 Unity 관련 인자이며, 더 자세한 내용은 유니티 문서에서 확인할 수 있습니다.

서버는 추가 인자도 지원합니다. 예:


.\FusionDedicatedServerSample.exe -batchmode -nographics -logFile output.log -session my-custom-session -region us -lobby my-custom-lobby -port 30001 -Pmap city -Ptype free-for-all

이 경우 서버는:

  • -session <custom session name>: 세션 이름을 my-custom-session으로 시작 (기본값은 무작위 GUID).
  • -region <region ID>: US 리전에 연결 (기본값은 Best Region).
  • -lobby <custom lobby name>: my-custom-lobby라는 로비에 세션 게시 (기본값은 ClientServer 로비).
  • -port <custom port number>: 포트 30001에 바인딩 (기본값은 27015).
  • -P<property name> <value>: 커스텀 속성 설정. 예: map = city, type = free-for-all.

위 인자들은 모두 선택 사항이며 개별적으로 또는 조합해 사용할 수 있습니다.
서버는 클라이언트가 모두 접속 종료하면 자동으로 셧다운 되어 종료됩니다.

자세한 설정 방법은 Matchmaking API 문서를 참고하세요.

클라이언트 모드

애플리케이션을 일반적으로 더블클릭하여 실행하면 클라이언트용 게임 창이 열립니다. 여기서 다음이 가능합니다:

  1. Session Name 필드를 입력해 특정 게임에 참여하거나 비워 두면 무작위 게임에 참여.
  2. 기본 ClientServer 로비 또는 Custom Lobby 필드에 지정된 커스텀 로비에 참여.
    • 로비에 참여하면 해당 로비의 Game Session 목록이 표시되며, Join 버튼으로 게임에 들어갈 수 있습니다.
    • Shutdown 버튼을 통해 NetworkRunner를 종료하고 다시 시작할 수도 있습니다.

게임 서버에 연결되면 각 클라이언트는 하나의 플레이어를 할당받고, 일반적인 WASD 키로 이동할 수 있습니다.
클라이언트는 Shutdown 버튼을 눌러 서버와 연결을 끊을 수 있으며, 이 경우 Menu 씬으로 돌아갑니다.

Back to top