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 로직(데미지 계산 등)을 직접 작성
실습 과제
FRAMEWORK_MULTIPLAYER심볼을 켜고HostAsync로 세션을 열어본다.SearchLobbiesAsync로 로비 목록을 조회해본다.
이전 문서 / 다음 문서
이전: 19_Integration.md 다음: 21_TestFramework.md
관련 API
MCP_Index.md Multiplayer 섹션, MCP_Rules.md #13