Table of Contents

20. Multiplayer

왜 필요한가

FishNet은 이미 완성도 높은 네트워킹 솔루션이다. 이를 재추상화하면 FishNet 업데이트를 따라가기 어렵고 불필요한 레이어가 늘어난다.

언제 사용하는가

FRAMEWORK_MULTIPLAYER 심볼이 활성화된 프로젝트에서 호스팅/조인/로비 기능이 필요할 때만 사용한다.

프로젝트에서 어떤 역할인가

FishNet/EOS 기능으로 해결 가능한 범위는 Framework를 확장하지 않는다. INetworkObject/INetworkBehaviour/INetworkTransform 같은 재추상화, Custom Rpc/SyncVar/Observer 재구현은 금지된다. Multiplayer 코드에는 Damage/Inventory/Skill/Quest/AI 같은 Gameplay 로직을 넣지 않는다.

실제 게임에서는 언제 호출되는가

멀티플레이 로비 화면에서 HostAsync/JoinAsync/SearchLobbiesAsync.

코드 예제

[Inject] private IMultiplayerSystem _mp;
await _mp.InitializeAsync();
await _mp.HostAsync();

관련 Sample

Samples/Multiplayer/MultiplayerSample.cs, SamplePlayer.cs

Best Practice

FRAMEWORK_MULTIPLAYER 심볼이 없으면 관련 코드 전체가 컴파일에서 제거되므로, 싱글/멀티 겸용 프로젝트는 이 심볼로 분기한다.

자주 하는 실수

  • FishNet 기능을 Framework에서 다시 감싸려고 시도
  • Multiplayer 코드에 Gameplay 로직(데미지 계산 등)을 직접 작성

실습 과제

  1. FRAMEWORK_MULTIPLAYER 심볼을 켜고 HostAsync로 세션을 열어본다.
  2. SearchLobbiesAsync로 로비 목록을 조회해본다.

이전 문서 / 다음 문서

이전: 19_Integration.md 다음: 21_TestFramework.md

관련 API

MCP_Index.md Multiplayer 섹션, MCP_Rules.md #13