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



시작하기 전에
샘플을 실행하려면 먼저 PhotonEngine 관리 화면에서 Fusion AppId를 생성하고, Fusion 메뉴에서 접근 가능한 Real Time 설정의 App Id Fusion
필드에 붙여 넣어야 합니다.
다운로드
Version | Release Date | Download |
---|---|---|
2.0.6 | 7월 10, 2025 | Fusion 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 포럼 글을 참조하세요.


빌드가 위치한 폴더에서 터미널을 열고 다음을 실행합니다:
.\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 문서를 참고하세요.
클라이언트 모드
애플리케이션을 일반적으로 더블클릭하여 실행하면 클라이언트용 게임 창이 열립니다. 여기서 다음이 가능합니다:
Session Name
필드를 입력해 특정 게임에 참여하거나 비워 두면 무작위 게임에 참여.- 기본
ClientServer
로비 또는Custom Lobby
필드에 지정된 커스텀 로비에 참여.- 로비에 참여하면 해당 로비의
Game Session
목록이 표시되며,Join
버튼으로 게임에 들어갈 수 있습니다. Shutdown
버튼을 통해NetworkRunner
를 종료하고 다시 시작할 수도 있습니다.
- 로비에 참여하면 해당 로비의
게임 서버
에 연결되면 각 클라이언트는 하나의 플레이어를 할당받고, 일반적인 WASD 키로 이동할 수 있습니다.
클라이언트는 Shutdown
버튼을 눌러 서버와 연결을 끊을 수 있으며, 이 경우 Menu
씬으로 돌아갑니다.