- 개요
보드판에 놓아진 마커의 결과를 서버와 클라이언트에서 각각 핸들링하여 처리하도록 설계한다
- 서버 사이드
1) Game 클래스

SwitchCurrentPlayer 함수를 추가하여 현재 플레이어를 상대 플레이어로 설정할 수 있도록 한다

AddWin 함수를 추가하여 승리한 플레이어의 타입에 맞춰 플레이어의 승수를 증가시킨다
2) UsersManager 클래스

IncreaseScore 함수를 추가하여 인자로 받은 플레이어의 아이디에 해당하는 플레이어의 점수를 증가시킨다
3) MarkCellRequestHandler 클래스

클라이언트로부터 전달받은 MarkCellRequest 패킷을 핸들링하는 핸들러 클래스에 대한 Logger를 추가하고
생성자에서 추가한 Logger를 설정한다

Handle 함수를 위와 같이 수정한다
패킷을 전송한 플레이어의 아이디를 사용하여 참가중인 Game의 인스턴스를 가져온다
이후 가져온 Game 인스턴스의 검증이 끝난 후에 마커가 놓인 인덱스를 포함한 로그를 찍는다
놓여진 마커의 결과에 따라 다음의 로직을 처리한다
- 놓여진 마커의 결과가 아무것도 없는 경우 : 현재 플레이어를 변경 + 얼리 리턴
- 놓여진 마커의 결과가 승리인 경우 : 마커를 놓은 플레이어의 승수와 점수 증가 + 로그를 찍음
- 클라이언트 사이드
1) UI_BoardCell 클래스

CellClicked 함수를 위와 같이 수정하여
서버로 전송할 Net_MarkCellRequest 패킷에 보드판에 놓은 마커의 인덱스의 값을 첨부한다

UpdateUI 함수를 위와 같이 구성한다
보드판의 개별 칸에서 인자로 받은 플레이어의 타입을 가져와 타입에 맞는 마커를 활성화한다
마커가 활성화된 칸의 클릭은 동작하지 않도록 설정한다
2) UI_Board 클래스

위의 3가지 함수를 수정하거나 새롭게 생성한다
- Start 함수 : OnMarkHandler의 OnMarkCell 이벤트에 UpdateBoard 함수를 콜백 함수로 바인드
- OnDestroy 함수 : OnMarkHandler의 OnMarkCell 이벤트에서 콜백 함수 제거
- UpdateBoard 함수 : 인자로 받은 Net_OnMarkCell 패킷의 플레이어가 선택한 보드판의 칸을 업데이트
3) GameManager 클래스 - Game 클래스

GetOpponent 함수를 추가하여 현재 플레이어의 상대 플레이어의 이름을 반환한다

SwitchCurrentPlayer 함수를 추가하여 현재 플레이어를 상대 플레이어로 설정한다

GetPlayerType 함수를 추가하여 현재 플레이어의 마커 타입을 반환한다
4) OnMarkCellHandler 클래스

서버로부터 받은 Net_OnMarkCell 패킷을 핸들링하기 위한 핸들러 클래스를 생성한다
OnMarkCell 이벤트 멤버변수를 추가하여 Net_OnMarkCell 패킷을 인자로 받는 콜백함수를 호출한다

Handle 함수의 로직은 위와 같다
서버로부터 Net_OnMarkCell 패킷을 전달받은 후에 현재 플레이어를 전환하고 로직을 진행한다
- 현재 플레이어의 턴이면서 + 마커를 놓은 결과가 아무것도 없는 경우 : 게임의 입력 활성화
- 마커를 놓은 결과가 무승부 또는 승리한 경우 : 게임의 입력 비활성화
- 이후 OnMarkCell에 바인드된 콜백함수를 호출
- 최종 실행 결과

'유니티 엔진 - 게임 프로젝트 > 데디케이트 기반 모바일 게임' 카테고리의 다른 글
| 인게임 구현 - 최종) 플레이어 턴 텍스트 수정 + 승리 애니메이션 (0) | 2026.01.12 |
|---|---|
| 인게임 구현 - 4) 보드판에 놓여진 마커 검증 + 승패 판단 (0) | 2026.01.06 |
| 인게임 구현 - 3) 보드판의 구성과 네트워크 통신 (0) | 2026.01.05 |
| 인게임 구현 - 2) 플레이어의 턴 표시 (0) | 2025.12.29 |
| 인게임 구현 - 1) 클라이언트의 GameManager 클래스 (0) | 2025.12.29 |