- 개요
게임을 플레이하는 보드판을 구성하고 보드판에서 이뤄지는 행동의 네트워크 통신을 설계한다
- 서버 + 클라이언트 공용
1) WinLineType 클래스

승리의 경우의 수를 의미하는 WinLineType 구조체를 생성한다
경우의 수는 위와 같이 9개로 구성하였다
2) MarkOutcome 클래스

보드판에 마커를 놓은 후에 발생하는 결과의 수를 의미하는 MarkOutcome 구조체를 생성한다
각각 아무것도 발생하지 않는 경우 / 승리한 경우 / 무승부인 경우를 의미한다
3) PacketType 클래스

PacketType 구조체에 2개의 패킷을 추가한다
- 클라이언트에서 서버로 전송하는 패킷 : 보드판에 마커를 놓은 후에 전송하는 MarkCellRequest 패킷
- 서버에서 클라이언트로 전송하는 패킷 : 놓아진 마커로 인한 결과를 전송하는 OnMarkCell 패킷
4) Net_MarkCellRequest 클래스

플레이어가 보드판에 마커를 놓은 후에 클라이언트에서 서버로 전송하는 MarkCellRequest 패킷 클래스를 생성한다
Type 프로퍼티를 사용하여 패킷의 타입을 지정하고, Index 프로퍼티를 사용하여 마커가 놓인 위치를 기록한다
- Deserialize 함수 : 역직렬화하여 마커가 놓인 위치를 설정
- Serialize 함수 : 직렬화하여 패킷의 타입과 마커가 놓인 위치를 패킷에 기록
5) Net_OnMarkCell 클래스

놓인 마커의 결과를 서버에서 클라이언트로 전송하는 OnMarkCell 패킷 클래스를 생성한다
멤버변수의 구성은 다음과 같다
- Type 프로퍼티 : 패킷의 타입
- PlayerName 프로퍼티 : 마커를 놓은 플레이어의 이름
- Index 프로퍼티 : 놓인 마커의 위치
- Outcome 프로퍼티 : 놓인 마커로 인한 결과값
- WinLineType 프로퍼티 : 놓인 마커의 승리의 결과값
멤버함수의 구성은 다음과 같다
- Deserialize 함수 : 역직렬화하여 PlayerName / Index / Outcome / WinLineType 프로퍼티를 설정
- Serialize 함수 : 직렬화하여 모든 프로퍼티 정보를 패킷에 기록
- 서버 사이드
1) MarkCellRequestHandler 클래스

클라이언트로부터 수신받은 MarkCellRequest 패킷을 핸들링하는 클래스를 생성한다
IPacketHandler 인터페이스를 상속받은 후에 Handle 함수를 오버라이드한다
- 클라이언트 사이드
1) UI_Board 클래스

게임이 진행되는 보드판의 클래스를 생성한다
보드판은 총 3 X 3의 칸으로 구성되어 있으며 Grid Layout Group을 사용하여 칸을 생성한다
멤버변수의 구성은 다음과 같다
- _boardCellPrefab 멤버변수 : 생성할 칸의 prefab
- _cells 멤버변수 : 생성된 칸과 인덱스를 연결할 딕셔너리
Start 함수에서는 ResetBoard 함수를 호출한다
ResetBoard 함수에서는 보드판의 칸들을 새로 생성하고 생성된 칸마다 Init 함수를 호출한다
2) UI_BoardCell 클래스

보드판에 생성되는 각각의 칸의 클래스를 생성한다
멤버변수의 구성은 다음과 같다
- _button 멤버변수 : 해당 칸의 Button 컴포넌트
- _index 멤버변수 : 해당 칸의 인덱스
- _row 멤버변수 : 해당 칸의 행번호
- _col 멤버변수 : 해당 칸의 열번호
- _oImg 멤버변수 : 해당 칸에서 찍을 O 표시
- _xImg 멤버변수 : 해당 칸에서 찍을 X 표시

Start 함수는 위와 같이 구성하여 자식 오브젝트들을 찾아 _oImg 멤버변수와 _xImg 멤버변수를 설정한다

Init 함수는 위와 같이 구성하였다
생성되는 보드판의 칸의 인덱스와 Button 컴포넌트를 설정하고 클릭 이벤트에 CellClicked 함수를 연결한다
마지막으로 칸의 행(가로)과 열(세로)을 설정한다

CellClicked 함수는 위와 같이 구성하여 칸을 클릭할 수 있는 경우와 클릭할 수 없는 경우를 판단하도록 설계한다
- 최종 실행 결과
'유니티 엔진 - 게임 프로젝트 > 데디케이트 기반 모바일 게임' 카테고리의 다른 글
| 인게임 구현 - 5) 서버와 클라이언트의 마커 결과 핸들링 (0) | 2026.01.07 |
|---|---|
| 인게임 구현 - 4) 보드판에 놓여진 마커 검증 + 승패 판단 (0) | 2026.01.06 |
| 인게임 구현 - 2) 플레이어의 턴 표시 (0) | 2025.12.29 |
| 인게임 구현 - 1) 클라이언트의 GameManager 클래스 (0) | 2025.12.29 |
| 로비 구현 - 최종) 다른 상대 탐색 (0) | 2025.12.23 |