3. 장르 1 vs 1 실시간 전략 디펜스 게임
목표 상대방의 HQ 파괴
개요
• 3개의 라인에서 일정한 주기마다 로봇이 생성
• 로봇은 자동으로 라인을 따라 상대방의 HQ를 향해 전진
하고 적 로봇을 만나면 전투에 돌입
• 플레이어는 영웅을 소환해 강력한 스킬을 사용
▶ 전장의 상황을 빠르게 파악하고 적재적소에 스킬을
사용하는 라인 관리 능력이 필요
4. 백 성 진
서버 & 클라
이 규 원
클라이언트
최 재 우
서버
클라이언트 메인 로직 구현
게임 전반 기획
UI 및 맵 디자인
클라이언트 – 서버 통신 모듈 제작
애니메이션
VFX, SFX
멤버십 서비스
로비/채팅/게임 서버 관리
다량의 실시간 비동기 통신
5. 클라이언트는 서버를 사용한 3D 게임이라는
서버는 비동기 실시간 통신이라는
새로운 경험을 제 1순위로 선정
마감 2주 전에 기획을 엎어버리면서
무의식적으로만 생각하고 있었던
게임의 재미가 제일 중요한 목표였다는 사실을 깨달음
0 재 미
1 새로운 경험
2 성능, 비주얼 등
6. 백 성 진
서버 & 클라
100% GitHub을 통한 협업 경험
기능이 부족한 Unity Teams의 Collaborate를 사용해서 개발하
는 단계를 넘어 GitHub을 원활하게 사용하는 수준으로 발전
70% JSON, CSV를 활용한 VFX, SFX 데이터 유지 보수
스킬의 종류가 많아짐에 따라 자료 관리의 필요성을 느끼고 사용
JSON과 CSV를 사용해 스킬 정보 및 사운드 관리
90% 클라이언트단 통신 모듈
서버에서 패킷 송신 시 헤더 패킷 ID 분석 후 목적지로 전달
서버로 데이터 송신 시 클래스 요소별로 데이터 세팅 후 송신 요청
7. 100% 3D 온라인이라는 새로운 장르의 게임 개발
많이 경험했던 2D 싱글 게임에서 벗어나 실력 있는 사람들과
새로운 장르의 개발을 통해 도전에 대한 심리적 부담감 탈피
90% 실시간 전략 게임에 대한 게임 디자인 전반을 수행
고민해보지 않았던 장르에 대해 고민할 기회를 갖고 UI나 맵 디자인
등 프로그래밍 외적인 지식 습득
80% 클라이언트 개발자로서 서버에 대한 이해
서버에 대해 전무했던 지식을 보충하고 서버에 대한 이해도를
높여서 온라인 게임 개발력 함양
이 규 원
클라이언트
8. 100% 스스로 하나의 프로젝트에만 열중하기
2달 동안 하나의 프로젝트에만 열중해서 코딩을 해보면서
자신의 한계를 시험하고 극복
100% 처음 접하는 분야에 대한 열정 발휘
이전에 해보지 못했던 ‘게임 서버’라는 분야에 도전해서 열정을
가지고 스스로 공부해가면서 개발
100% 각자의 역할을 충실히 수행하기
팀원들을 믿고 자신이 맡은 역할을 충실히 수행하여 만족스러운
결과 도출
최 재 우
서버
9. 엑스컴을 본따서 1 vs 1 턴제 체스류 게임을 목표
빠른 역할 분담 이후 작업 착수
• 백성진 : Python Socket을 이용한 서버 프로토타입 제작
• 이규원 : Unity로 게임 메인 로직 구현
• 최재우 : Flask를 이용한 멤버십 서비스 구현
1:N 채팅, 유닛 이동 및 공격 정보 전달까지 성공
▶ 1 vs 1 턴제 게임으로는 얻을 수 있는 지적 향상의 수준이 너무 낮다는 피드백
10. 피드백 수용 후 롤과 스타를 섞은 1 vs 1 실시간 AOS 게임으로 변경
한 플레이어가 3명의 영웅을 컨트롤해서 상대방의 HQ를 파괴하는 게임
• 백성진 : 서버-클라 송수신 모듈 구현, 캐릭터 애니메이션 및 스킬 이펙트 작업
• 이규원 : 이동과 스킬 사용 구현, 수신한 데이터로 remote 캐릭터 행동 동기화
• 최재우 : 멤버십 기능 구현 완료, 로비 / 채팅 / 게임 서버 구현
게임의 완성도를 위해 에셋을 구매해서 보기 좋은 게임을 만들기 위해 노력
▶ 게임이 재미가 없다는 의견이 나옴
11. 마감이 2주 남았지만 빠르게 피드백 수용 후 현재의 1 vs 1 디펜스 게임으로 변경
스킬의 개수가 많아지고 그 효과도 다양해짐
자동으로 움직이는 캐릭터의 수도 급증하면서 서버를 비동기 방식으로 전환
서버-클라 테스트에서 생각지도 못했던 통신 에러 발생
• TCP로 빠르게 전송된 packet들이 붙어서 출력되는 현상 발생
• 정상적인 해결법 : packet의 헤더 뒤에 packet size를 붙여서 size 만큼의 정보를 read
• 최종적인 해결법 : padding을 넣어서 인게임에서 사용하는 모든 packet의 size를 37로 통일
12.
13.
14.
15. Flask를 이용해 게임 클라이언트와 API 통신
이를 이용해 로그인 및 업적 시스템 구현
Flask 서버 피드백 시 MVC 패턴에 맞추기 위해
Flask의 blueprint 기능을 이용
16. 타 게임의 채팅에서 인터넷이 끊겼을 경우에
채팅을 보내도 로컬 클라이언트에 출력이
안되는 것을 확인
▶ 유저가 메시지 입력 시 항상 서버로 전송
▶ 서버에서 모든 유저에게 broadcast