책 소개
요약
이제는 유니티 게임에서도 멀티플레이 네트워크 기능은 필요불가결한 요소가 됐다. 이 책은 플레이어 호스팅 게임에서부터 독립적인 전용 서버와 클라우드 멀티플레이어 기술에 이르기까지, 다양한 네트워킹 미들웨어를 활용해서 유니티 게임 엔진으로 멀티플레이 네트워크 게임을 제작하는 방법에 대한 실용적 안내서다. 이 책은 복잡한 멀티플레이 게임의 구현 기법을 기본적인 구성요소로 나눠서 알기 쉽게 설명한다.
이 책에서 다루는 내용
■ 유니티 네트워킹을 이용해서 게임 내에서 플레이어가 게임을 호스팅하는 방법
■ 포톤 클라우드를 이용한 클라우드 기반 게임 개발
■ 대규모 멀티 플레이어 환경 구현을 위한 전용 서버의 활용
■ 서버 권한 집중형 게임 로직 개발
■ 지연 및 신뢰성 없는 네트워크에 대한 대처 방법
■ HTTP 기반의 푸시 메시징을 위한 펍넙 활용
■ 게임 데이터를 클라우드에 보존하기 위한 Player.IO 활용
■ 네트워크 개체 보간을 위한 다양한 기법 활용
이 책의 대상 독자
이 책은 유니티 게임 엔진으로 멀티플레이어 게임 개발의 첫걸음을 내딛으려는 개발자들을 대상으로 한다. 독자는 프로그래밍에 대해서는 기초적인 경험을 가지고 있어야 하며, 유니티 IDE에 대한 사전 지식이 꼭 필요하지는 않다.
이 책의 구성
1장, ‘유니티 네트워킹: 퐁 게임’에서는 신뢰성 있는 UDP 통신의 개념과 게임에서 채용되는 다양한 유형의 서버를 소개한다. 유니티 네트워킹을 살펴보고 퐁과 유사한 2인용 네트워크 게임을 제작해 본다.
2장, ‘포톤 유니티 네트워킹: 채팅 클라이언트’에서는 유니티 네트워킹의 서드파티 대안을 다루면서, 클라우드에서 호스팅되는 게임 서버, 간단한 매치메이킹, 친구 목록의 개념을 소개한다. 추가로 간단한 채팅 클라이언트 개발까지 다룬다.
3장, ‘포톤 서버: 별 수집 게임’에서는 게임을 위한 전용 서버를 소개한다. 그리고 포톤 서버 애플리케이션 개발, 서버 접속, 요청/응답/이벤트 시스템을 이용한 통신 및 간단한 별 수집 게임을 제작해 본다.
4장, ‘Player.IO: 봇 전쟁’에서는 또 다른 전용 서버 시스템을 다룬다. Player.IO의 데이터베이스 기능, Player.IO 서버를 생성하는 방법, 유니티에서 접속하는 방법 그리고 사용자 스탯이 보존되는 간단한 RTS 스타일의 게임 제작을 다룬다.
5장, ‘펍넙: 통합 채팅 상자’에서는 HTTP 메시징 서비스를 이용한 통신을 소개한다. 통신용으로서 HTTP의 장점과 유의사항, WWW 클래스를 이용한 펍넙 통신 개발 및 채팅방 애플리케이션 제작을 다룬다.
6장, ‘개체 보간과 예측’에서는 서버 사이드 이동 물리 처리, 그에 따른 잠재적인 이슈와 해결책을 소개한다. 클라이언트 사이드 이동 예측과 원격 개체의 움직임을 부드럽게 처리하는 방법을 살펴본다.
7장, ‘서버 사이드 명중 탐지’에서는 총격 스타일 게임을 위한 서버 사이드 명중 탐지 개념을 소개한다. 많은 온라인 게임에서 일어나는 표적 예측 문제의 배경 논리와 게임 상태를 되감아서 이 문제를 해결하는 방법을 설명한다.
목차
목차
- 1장 유니티 네트워킹: 퐁 게임
- 멀티플레이어 게임 소개
- UDP 통신 소개
- 마스터 서버 설정
- NetworkView와 상태 직렬화
- 커스텀 상태 직렬자 작성
- RPC 사용
- 서버 초기화
- 서버 접속
- 마스터 서버 접속
- 마스터 서버를 이용한 서버 등록
- 이용 가능한 서버 살펴보기
- 전용 서버 모델 구축
- 유니티에서의 서버
- 컴파일러 지시자
- 프로 버전이 아닌 경우의 서버 콘솔 구축
- 네트워크에 접속된 레벨의 로딩
- 멀티플레이어 퐁 게임 제작
- 필드 준비
- Ball 스크립트
- Paddle 스크립트
- 점수 기록
- 플레이어의 점수 표시
- 게임 네트워킹 작업
- 막대 등장시키기
- 공의 네트워크 연결
- 점수 기록의 네트워크 연결
- 접속 화면
- 요약
- 2장 포톤 유니티 네트워킹: 채팅 클라이언트
- PUN과 유니티 네트워킹의 차이점
- 포톤 클라우드를 이용한 PUN 구축
- Photonview 이용
- 포톤에 접속하고 방 목록 얻기
- 방 생성과 참여
- 방 생성
- 방 참여
- 사용자 기호에 따른 결과 필터링
- 필터링 배열
- 방 목록의 필터링과 캐싱
- 자동 매치메이킹
- 친구 찾기
- 플레이어 사이의 레벨 동기화
- 채팅 클라이언트 개발
- 접속 화면
- 로비 화면
- 채팅방
- 친구 목록 추가
- 요약
- 3장 포톤 서버: 별 수집 게임
- 전용 서버
- 포톤 서버를 구하는 방법
- 서버 애플리케이션 개발
- 클래스 라이브러리 개발
- 오퍼레이션 요청에 대한 응답
- 서버 코드의 배포
- 유니티에서 접속하고 메시지 전달하기
- 게임 로직 클래스 개발
- 플레이어 ID 할당
- 별 수집 게임 제작
- 클래스 라이브러리 준비
- Actor 클래스
- 플레이어에게 ID 전송
- 게임 상태 추적
- 별의 등장과 획득
- 이벤트 브로드캐스트
- 유니티에서 접속하기
- 액터의 생성과 소멸
- 플레이어 제어
- 요약
- 4장 Player.IO: 봇 전쟁
- Player.IO vs 포톤 서버
- 개발 서버 준비
- 유니티 클라이언트 SDK 준비
- Player.IO 접속
- 방 목록 얻기
- 방 접속
- 방 생성
- 랜덤 매치메이킹
- 메시지 송수신
- 서버 사이드 코드
- BigDB 이용
- 간단한 RTS 프로토타입 제작
- 서버 사이드 코드
- 클라이언트 사이드 코드
- 요약
- 5장 펍넙: 통합 채팅 상자
- 펍넙의 개요
- 시작하기
- 펍넙의 작동
- 펍넙에서 보낸 JSON 파싱
- 펍넙 인터페이스 개발
- 통합 채팅 애플리케이션 개발
- 채팅 메시지 게시
- 채팅 로그의 표시
- 요약
- 6장 개체 보간과 예측
- 개체 보간
- 클라이언트 사이드 예측
- 리지드바디 시뮬레이션
- 네트워크 접속 오브젝트 생성
- 기초적 보간의 추가
- 보간의 개선
- 서버 권한 집중형 이동의 준비
- 서버 권한 집중형 이동의 구현
- 해킹에 대한 참고사항
- 요약
- 7장 서버 사이드 명중 탐지
- 클라이언트 사이드 vs 서버 사이드 명중 탐지
- 테스트베드 제작
- 명중 탐지를 서버로 이전하기
- 개체 되감기
- 요약