-
스파르타) The Last Rollback (D-27, Node.js 게임 서버 최종 프로젝트)TIL-sparta 2024. 7. 31. 22:25
> 과제 진행 간 완료한 사항 및 문제점과 해결 과정을 정리해보았다.학습 키워드: Node.js, Unity, NavMesh, Path finding
1. 완료한 과제 진행 사항
1) 매칭 큐 및 던전 입장 기능 구현 완료:
매칭 큐 기능 구현을 완료하고 PR 생성 및 Merge를 진행했다. 같은 브랜치에서 작업한 팀원과 코드를 합치고 실행하는 과정에서 Unity 내에서 오류가 발생하여 클라이언트 코드 수정에 집중하여 커밋 자체는 별로 없다.
(상세 내용은 위 PR 및 연결된 Issue 참고)
public static void S_EnterDungeonHandler(PacketSession session, IMessage packet) { S_EnterDungeon pkt = packet as S_EnterDungeon; if (pkt == null) return; Scene scene = SceneManager.GetActiveScene(); if (scene.name == GameManager.DungeonScene) { DungeonManager.Instance.Set(pkt); } else { TownManager.Instance.StopQueueTimer(); GameManager.Instance.Pkt = pkt; SceneManager.LoadScene(GameManager.DungeonScene); // 원인 } foreach (var playerInfo in pkt.PlayerInfo) { // 작성한 코드 if (playerInfo.PlayerId == GameManager.Instance.UserName) { DungeonManager.Instance.Spawn(playerInfo, true); // 에러 발생 위치 } else { DungeonManager.Instance.Spawn(playerInfo, false); } } }
서버쪽 수정 사항으로는 매칭 큐에 존재하는 동일 유저 정보를 제거하지 못하던 문제를 수정했고, 클라이언트는 S_EnterDungeon 패킷 수신 시 유저 캐릭터를 Spawn하는 과정에서 DungeonManager의 singleton instance를 읽지 못하는 문제가 있어 Debug.Log로 확인하다가 DungeonScene이 로드되면서 DungeonManager에 대한 접근이 불가능해진다는 사실을 알게되어 뒷부분에 추가해둔 for loop를 DungeonManager의 Awake 내부로 옮기게 되었다.
2. 과제 진행 간 문제점
1) 통신 구조 변경에 대한 논의:
지난 TIL에서 언급한 부분 관련 내용
- NavMesh나 pathfinding에 대한 지식 부족으로 개발 시간 예측 불가
- 튜터님들과 상의 결과 피드백
- 우선적으로 실제로 통신 시간이 오래 걸리는지를 알아내는 것이 중요할 것으로 결론지음
- 1안이었던 P2P 연결 수립 부분은 지양 -- 이유는 현재 우리 팀이 C#으로 P2P를 구현할 수 있는 역량이 되는지를 알 수 없고, 무엇보다 진행중인 캠프 과정이 Node.js 게임서버이므로 Node.js에 집중하는 것이 맞다고 판단되기 때문
- 2안으로 navmesh라는 Node 라이브러리가 있는 것을 확인하여 path finding 연산 자체를 서버에서 구현하는 방법을 생각했었지만 서버 부하가 커질 것이 우려되어 선택하지 않음
- 3안으로 제시된 것이 NavMesh 연산만을 담당하는 Dedicated 서버를 두는 방안인데, 1안과 마찬가지로 이 서버가 C#으로 구현되어야 한다는 점이 문제
- 피드백 이후 추가 논의 및 결론
- 애초에 문제가 되었던 부분인 '플레이어가 몬스터를 공격하는 상황'의 통신 구조에서 서버가 추측항법 연산을 해준 뒤 호스트(pathfinding 연산을 담당할 클라이언트)에게 전달해주게 되면 지연 시간으로 인한 유저 경험 문제가 최소화 될 것으로 판단
- MVP 기능 구현을 우선하기 위해 일단 길 찾기를 클라이언트 주도로 진행하기로 결정
- MVP 이후 3안 진행 고민해보기
--
REFERENCES:> 프로젝트 repo
728x90'TIL-sparta' 카테고리의 다른 글
스파르타) The Last Rollback (D-25, Node.js 게임 서버 최종 프로젝트) - timer (0) 2024.08.03 스파르타) The Last Rollback (D-26, Node.js 게임 서버 최종 프로젝트) (0) 2024.08.01 스파르타) The Last Rollback (D-28, Node.js 게임 서버 최종 프로젝트) (0) 2024.07.31 스파르타) The Last Rollback (D-29, Node.js 게임 서버 최종 프로젝트) (0) 2024.07.29 [TIL] TypeScript 배우기 (짧) - 1 (0) 2024.07.28