멀티플레이 구조 제안 (로컬/상대 캐릭터 관리)
배경
현재 구조는 GameScene에서 CharacterController 1개와 GameplayManager 1개가 1:1로 연결되어 로컬 플레이어의 입력/상태/규칙을 처리합니다.
이제 상대 캐릭터(opponentCharacterController)를 추가해야 해서, “게임 로직 매니저를 1개로 유지할지 / 2개로 분리할지” 방향을 정해야 합니다.
안 A) GameplayManager 1개로 로컬/상대 모두 관리 (Single Manager)
개요
- GameplayManager가 localState, remoteState(또는 localCharacter, remoteCharacter)를 동시에 들고 업데이트
- 로컬 입력(GameInputProviding)과 원격 네트워크 이벤트를 한 곳에서 처리
- 종료 조건(TimeoutOrFinishEndCondition) 평가도 한 곳에서 수행
장점
- 타임아웃/결승 도착 같은 규칙을 한 곳에서 일관되게 적용하기 쉬움
- 승패/종료 조건이 “중앙 집중”이라 디버깅이 단순할 수 있음
- 초기 구현이 빠르고 구조가 직관적
단점
- 로컬(입력 기반) vs 원격(스냅샷/보간 적용)의 성격이 달라서, 한 매니저에 섞이면 if isRemote...가 늘며 복잡도가 빠르게 증가할 수 있음
- 네트워크 동기화 방식이 바뀌면 매니저 전체에 영향이 생겨 결합도가 커질 위험
- 매니저가 비대해지면 테스트/리팩토링 비용 증가
안 B) GameplayManager 2개(로컬/상대)로 분리 + 상위에서 승패/종료 조정 (Dual Manager + Coordinator)