- 개요
클라이언트가 서버에 연결된 이후 로그인 - 로비 입장 - 게임 접속까지의 과정을 처리해보도록 하겠습니다.
처리는 다음의 과정으로 이루어져 있습니다.
- 1) 클라이언트에서 서버로 C_Login 패킷 전송
- 2) 서버에서 클라이언트로 S_Login 패킷 전송
- 3) 클라이언트에서 서버로 C_Create 패킷 전송 -> 해당 클라이언트의 캐릭터들 생성 요청
- 4) 서버에서 클라이언트로 S_Create 패킷 전송 -> 로비 UI에 캐릭터들 생성하여 배치
- 5) 클라이언트에서 서버로 C_EnterGame 패킷 전송 -> 선택하여 생성한 캐릭터로 게임 입장 요청
위의 과정중에서 2) ~ 5)를 처리해보겠습니다.
1) 서버 사이드
1 - 1) ClientSession 클래스

기존의 OnConnected 함수에서 절차와 맞지 않는 캐릭터를 생성하는 로직을 제거합니다.
해당 로직은 ClientSession_PreGame 스크립트에서 대신 수행하도록 합니다.
1 - 2) ClientSession_PreGame 클래스

2가지 멤버 변수를 추가합니다.
- AccountDbId : 로그인한 클라이언트의 AccountDbId 캐싱
- LobbyPlayers : 로비에 존재하는 플레이어들 캐싱

클라이언트의 로그인을 핸들링하는 HandleLogin 함수를 위와 같이 수정하였습니다.
우선, LobbyPlayers 멤버변수를 사용하기 이전에 비워주는 로직을 추가하였습니다.
이후의 로직은 다음과 같습니다.
- 로그인한 클라이언트의 계정을 DB에서 찾은 경우
- 해당 계정에 속해있는 플레이어들을 로비에 배치
- 클라이언트의 접속 상태를 ServerStateLobby로 변경
- 로그인한 클라이언트의 계정을 DB에서 찾지 못한 경우
- 해당 계정을 DB에 새롭게 추가
- 클라이언트의 접속 상태를 ServerStateLobby로 변경

게임에 입장하는 클라이언트의 캐릭터의 생성을 핸들링하는 HandleCreatePlayer 함수를 추가하였습니다.
로직은 다음과 같습니다.
- 생성할 캐릭터가 DB에 이미 존재하는 경우
- S_CreatePlayer 패킷 생성하여 전송
- 생성할 캐릭터가 DB에 존재하지 않는 경우
- 우선 DB에 1레벨의 스탯을 생성
- 다음으로 메모리에 1레벨의 스탯을 생성
- 스탯이 설정된 캐릭터를 생성하고 S_CreatePlayer 패킷 생성하여 전송

클라이언트의 생성된 캐릭터의 게임 입장을 핸들링하는 HandleEnterGame 함수를 위와 같이 추가하였습니다.
DB에서 입장할 캐릭터를 찾고 좌표를 설정하여 GameRoom에 입장시킵니다.
1 - 3) PacketHandler 클래스

클라이언트로부터 전송된 C_Create 패킷에 대응하는 C_CreatePlayerHandler 함수입니다.
ClientSession으로부터 HandleCreatePlayer 함수를 호출하여 캐릭터를 생성합니다.

클라이언트로부터 전송된 C_EnterGame 패킷에 대응하는 C_EnterGameHandler 함수입니다.
ClientSession으로부터 HandleEnterGame 함수를 호출하여 생성한 캐릭터를 게임에 입장시킵니다.
2) 클라이언트 사이드
2 - 1) PacketHandler 클래스

서버로부터 전송된 S_Login 패킷에 대응하는 S_LoginHandler 함수를 위와 같이 수정하였습니다.
로직은 다음과 같습니다.
- 로그인한 클라이언트의 캐릭터가 DB에 없는 경우 : 랜덤한 이름의 캐릭터를 생성
- 로그인한 클라이언트의 캐릭터가 DB에 있는 경우 : 해당 클라이언트의 첫번째 캐릭터로 게임에 입장

서버로부터 전송된 S_CreatePlayer 패킷에 대응하는 S_CreatePlayerHandler 함수를 추가하였습니다.
로직은 다음과 같습니다.
- 생성할 캐릭터가 없는 경우 : 랜덤한 이름값을 가진 캐릭터를 생성
- 생성할 캐릭터가 있는 경우 : 해당 캐릭터를 사용하여 게임에 입장
- 최종 실행 결과


위와 같이 플레이어가 생성된 것을 확인할 수 있습니다.
'대형 프로젝트 - C# + 유니티로 만드는 MMORPG 게임 개발 > (6) 라이브서비스' 카테고리의 다른 글
| 2D MMO 라이브 서비스 - (1 - 6) Hp 연동 (2) (0) | 2025.09.09 |
|---|---|
| 2D MMO 라이브 서비스 - (1 - 5) Hp 연동 (1) (0) | 2025.09.08 |
| 2D MMO 라이브 서비스 - (1 - 3) Player 연동 (1) (0) | 2025.09.01 |
| 2D MMO 라이브 서비스 - (1 - 2) 게임 접속 (0) | 2025.09.01 |
| 2D MMO 라이브 서비스 - (1 - 1) DB 연동 (0) | 2025.09.01 |