Pickles

cdc wiki
이동: 둘러보기, 검색

프로젝트 개요

기술개발 과제

BASEMENT CLEANER

과제 팀명

Pickles

지도교수

김*환 교수님

개발기간

2022년 9월 ~ 2022년 12월 (총 4개월)

구성원 소개

서울시립대학교 컴퓨터과학부 20179200** 주*진(팀장)

서울시립대학교 컴퓨터과학부 20179200** 임*수

서울시립대학교 컴퓨터과학부 20179200** 정*찬

서울시립대학교 컴퓨터과학부 20199200** 지*영

서론

개발 과제의 개요

개발 과제 요약

◇ 이번 프로젝트는 솔로 플레이 그리고 최대 4인까지 멀티플레이가 가능한 2D 플래포머게임 BASEMENT CLEANER를 개발하고 서비스 하는 것이 목표이다. 
◇ BASEMENT CLEANER는 지하실 혹은 땅굴같은 장소를 정리/청소하면서 여러 퍼즐들과 적을 만나고  이를 헤쳐나가는 게임이다. 게임에 사용되는 핵심적인 기능은 맵에 있는 여러 오브젝트(쓰레기, 돌)를 주워서 이를 공격이나 퍼즐 해결에 활용하는 것이다.
◇ BASEMENT CLEANER는 자신만의 맵을 제작하고 공유할 수 있는 레벨 에디터 기능을 제공한다.
   사용자는 자신만의 맵을 생성해서 서버에 등록 할 수 있고, 다른 사용자들이 만든 맵을 다운로드 받아서 플레이하고할 수 있다.

개발 과제의 배경

◇ 게임은 남녀노소 즐길 수 있는 여가활동이다.[1] 지금의 게임 산업은 어린아이만이 즐기는 여가활동이 아니라 전세대가 즐기는 여가활동이다. 실제로 미국에서 ESA(Entertainment Software Association)의 보고서를 살펴보면 게임을 즐기는 연령의 35%가 18~35세이고, 35세가 넘는 중장년층도 41%를 차지한다.

PicklesOverview.jpg


◇ 게임 시장은 꾸준히 성장하는 모습을 보여준다.[2][3] 게임시장은 코로나 19 사태의 수해를 본 산업 중 하나로 전 세계적인 외출 제한, 여가시간 확대로 인한 시장의 성장을 보여준다. 글로벌 게임 시장 분석 업체인 Newzoo에 의하면 세계 게임 시장은 2023년에 약 2,008달러 시장이 될 것으로 전망된다. 게임이 코로나 19 사태로 단기간 큰 성장을 한 것은 맞지만, 코로나 이전부터 나타난 경항을살펴보면 꾸준한 우상향 그래프를 보여준다. 현재는 전 세계적인 경기 침체와 하드웨어 공급의 문제로 인해 전년보다 소폭 감소할 것 이라는 전망도 있지만. 전체적 경향은 꾸준히 성장하는 모습을 보여준다.

PicklesOverview2.jpg 개요00007.jpg

◇ 유니티엔진은 언리얼 엔진과 함께 게임 엔진을 대표하는 엔진이다. 유니티 엔진은 언리얼 엔진과 비교하였을 때 여러 장점들이 있다. 먼저 스크립팅 언어로 C#을 사용하기 때문에 비전공자도 비교적 쉽게 배울 수 있고 비교적 가벼운 엔진이기 때문에 그리 높은 사양을 필요로 하지 않는다. 유니티의 또 다른 장점이라면 커뮤니티가 있다. 유니티는 앞서 말한 비교적 낮은 진입장벽으로 많은 사람들이 사용하고 많은 정보 공유가 이뤄지기 때문에 필요한 정보 획득에 유리 하다. 마지막으로 에셋 스토어가 있다. 에셋 스토어는 게임 제작에 필요한 각종 리소스와 스크립트, 플러그인 등을 판매하는 장터가 존재해서 소규모 프로젝트에 많은 도움을 준다.

개발 과제의 목표 및 내용

◇ 원활한 멀티 플레이가 가능해야한다. 사용자는 게임 서버를 이용한 멀티 플레이가 가능해야한다. 이 과정에서 응답시간을 줄이고, 패킷 손실 등을 최소화 하는 것을 목표로 한다.

◇ 사용자 친화적인 UI를 가지고 있어야 한다. 개발자 중심의 UI 디자인이 아닌 사용자에 초점이 맞춰진 UI를 제작하는 것을 목표로 한다.

◇ 직관적이고 익숙한 조작법을 가지고 있어야한다. WASD 혹은 화살표 키를 이용한 움직임, Space를 통한 점프등 사용자가 여러 게임에서 겪었던 조작법을 여기서도 그대로 사용할 수 있어야한다.

◇ 레벨 에디터 기능을 제공한다. 사용자는 자신 만의 맵을 만들 수 있어야한다. 또한 자신의 맵을 다른 사람과 공유할 수 있어야한다. 다른 사람이 만든 맵을 검색한다.

관련 기술의 현황

관련 기술의 현황 및 분석(State of art)

  • 전 세계적인 기술현황

현재 Steam상의 2D플래포머, Runner 카테고리에서 상위 게임들만이 가진 독특한 기능들을 조사하였다.

Katana zero - 시간을 느려지게 하는 기능이 있다. - 연막을탄을 이용하여 적들에게 숨을 수 있다. - 벽을타고 여러 번 재도약 할 수 있다.

Spelunky 2 - 밧줄의 움직임, 충돌 같은 물리적 효과가 사실적이다. - 맵의 지형을 파과하며 진행할 수 있다.

Celeste - 플레이어가 물에 들어가면 귀가 먹먹해지는 것처럼 사운드의 변화를 준다

Moonscars - 배경의 원근감을 통해 2D 게임이지만 3D 게임을 하는듯한 느낌을 준다. - 광택이 있는 물체는 거울처럼 물체들이 반사되어 보인다.

Notia - 여러 무기, 마법을 조합하여 새로운 마법을 만들어서 게임을 진행한다. - 맵에 무작위성을 부여하여 같은 맵을 플레이해도 다른 느낌을 준다. - 화려한 VFX가 적용되어 있다.


  • 특허조사 및 특허 전략 분석

㈜스마일게이트엔터테인먼트, 복수 사용자의 게임 제어방법 및 이를 위한 제어장치 (Method and apparatus for controlling game played by multi users) 10-2013-0009377 (2013-01-28)

㈜두바퀴소프트, 터치스크린 상에서의 게임 조작 시스템 (Control System For Game in Touch Screen Device) 10-2014-0011234

㈜넥슨코리아 ,게임서버 기준에 의한 로컬 클라이언트와 리모트 클라이언트에서의 프레임 동기화 방법 및 그 시스템METHOD AND SYSTEM FOR SYNCHRONIZING GAME OBJECT INFOMATION BETWEEN LOCAL CLIENT AND REMOTE CLIENT BASED ON GAME SEVER

시장상황에 대한 분석

  • 경쟁제품 조사 비교

PicklesOtherGames.JPG


  • 마케팅 전략

SWOT 분석

Strength:

◇ 최대 4인까지의 멀티플레이를 지원해서 여러 사람들과 함께 즐길 수 있음
◇ 레벨에디터를 제공하여 자신만의 맵을 공유하거나 공유 받을 수 있다.
◇ 위의 2가지 요소로 게임을 지속해서 플레이할 수 있도록 유도한다.
◇ 독점 플랫폼이 아님
   - 게임을 플레이하기 위해서 특정 게임기기를 살 필요없이 PC만 있으면 플레이가 가능함


Weakness:

◇ 플랫폼의 다양성 부족
    - 모바일, PS4, XBOX등의 플랫폼에서는 플레이 할 수 없다.


Opportunity:

◇ Steam, STOVE 등의 게임 유통사가 인디게임 유통에 호의적이다.

Threat:

◇ 2D플랫포머 장르는 과거부터 많은 게임들이 출시 되었고, 많은 게임들이 제작중이거나 출시 예정임

개발과제의 기대효과

기술적 기대효과

창작 마당이 존재하는 게임의 특성상 플레이어 모두가 창작자가 될 수 있고 난이도가 낮아, 새로운 콘텐츠 제작분야가 될 수 있을 것이다.

경제적, 사회적 기대 및 파급효과

1. 창작 마당의 활용 컴퓨터관련 교육이 주목받고 있는 현재, 게임은 흥미 유발에 가장 적합한 방식이다. 창작 마당은 간단한 동작으로 게임 요소를 배치해 볼 수 있고, 더 세세한 기능을 추가하고 싶다는 생각이 들게 하여 ‘컴퓨터’로 ‘나만의 게임’을 ‘직접’ 만드는 기회를 제공한다.

2. 플랫포머 게임을 통한 사고력 향상 플랫포머 게임은 통과를 방해하는 요소를 파악하고 이를 해결해나가는 방식의 게임이다. 게임 이용가능연령이 높지 않은 만큼 아이들이 게임을 플레이하는 과정에서 스트레스를 받지 않고 문제를 파악하고 해결하는 능력을 훈련할 수 있다.

기술개발 일정 및 추진체계

개발 일정

Pickles개발일정.JPG

구성원 및 추진체계

◇ Client

- 구성원: 임*수, 정*찬
- 사용 기술: Unity, Asprite

◇ Server

- 구성원: 주*진, 지*영
- 사용 기술: Unity, .NET (Game Server), nodejs(WebS erver), mariadb, docker, AWS EC2

설계

설계사양

제품의 요구사항

◇ R1: 플레이어는 레벨 에디터를 이용하여 자신의 레벨을 제작할 수 있어야 한다.
   - 플레이어는 팔레트를 이용해서 지형을 편집할 수 있어야 한다.
   - 플레이어는 팔레트를 이용해서 아이템을 배치할 수 있어야 한다.
   - 플레이어는 팔레트를 이용해서 몬스터를 배치할 수 있어야 한다.
   - 플레이어는 편집중인 레벨을 로컬에 임시로 저장할 수 있어야 한다.
   - 플레이어는 레벨을 서버에 저장할 수 있어야 한다.
◇ R2: 플레이어는 아래에 서술되는 움직임을 모두 할 수 있어야 한다.
   - 땅에 떨어진 쓰레기를 주울 수 있어야 한다.
   - 모은 쓰레기로 공격을 할 수 있어야 한다.
   - 아이템을 먹을 수 있어야 한다.
   - 방향키로 움직일 수 있어야 한다.
   - 아이템을 먹어 무기를 바꿀 수 있어야 한다.
   - 공격을 일정 이상 당하면 죽어야 한다.
◇ R3: 플레이어는 R2의 사항들을 멀티플레이 환경에서 모두 할 수 있어야 한다.

설계 사양

제품 요구사항 및 설계사양

Pickles설계사양1.JPG

Pickles설계사양2.JPG

개념설계안

◇ 플레이어는 레벨 에디터를 이용하여 자신의 레벨을 제작할 수 있어야 한다.

   - 플레이어는 팔레트를 이용해서 지형을 편집할 수 있어야 한다.
   - 플레이어는 팔레트를 이용해서 아이템을 배치할 수 있어야 한다.
   - 플레이어는 팔레트를 이용해서 몬스터를 배치할 수 있어야 한다.
   - 플레이어는 편집중인 레벨을 로컬에 임시로 저장할 수 있어야 한다.
   - 플레이어는 레벨을 서버에 저장할 수 있어야 한다.

◇ 네트워크 서버 (Dedicated Server)

  - 멀티 플레이할때 때 처리 권한을 서버에게 준다. (서버에서 모든 계산을 처리한다) 

PicklesServerArchitecture.png

◇ 플레이어는 아래에 서술되는 움직임을 모두 할 수 있어야 한다.

   - 땅에 떨어진 쓰레기를 주울 수 있어야 한다.
   - 모은 쓰레기로 공격을 할 수 있어야 한다.
   - 아이템을 먹을 수 있어야 한다.
   - 방향키로 움직일 수 있어야 한다.
   - 아이템을 먹어 무기를 바꿀 수 있어야 한다.
   - 공격을 일정 이상 당하면 죽어야 한다.

상세설계 내용

  • 간단한 구조

PicklesSimpleArchitecture.PNG


  • 상세 서버 구조

PicklesServer1.JPG

PicklesServer2.JPG

PicklesServer1.JPG

PicklesServer3.JPG


  • 서버의 내부 구조

PicklesServer4.JPG


  • 플레이어

PicklesPlayer.PNG


PicklesEnemy.PNG


  • 보스1

PicklesBoss1.PNG


  • 보스2

PicklesBoss2.PNG


  • 스위치

PicklesSwitchTrigger.PNG


  • UI 흐름도

PICKLESUIFLOWCHART.PNG


  • 서버 구조

PicklesServerArchitecture2.JPG


  • 방 생성 (Room Create)

PicklesCreateRoom.JPG


  • 방 입장 (Room Join)

PicklesJoinRoom.JPG


  • 방 새로고침 (Room Refresh)

PicklesRefreshRoom.JPG


  • 방 이름 체크 (Room Name Check)

PicklesRoomNameCheck.JPG


  • 게임 시작 (Start Game)

PicklesStartGame.JPG


  • 게임 시작시 흐름도 (실제 포트와 다름!)

PicklesInGame.JPG


  • 맵 에디터 (Input Controller)

PicklesMapEditor1.JPG


  • 맵 에디터 (Save)

PicklesMapEditor2.JPG


  • 맵 에디터 (Shaer)

PicklesMapEditor3.JPG

결과 및 평가

완료 작품의 소개

프로토타입 사진 혹은 작동 장면

  • 맵 에디터

PicklesMapEditor.gif PicklesMapEditor2.gif


  • 싱글플레이 및 기본 기능

PicklesMove.gif

PicklesJump.gif

PicklesRope.gif

PicklesSpring.gif

PicklesPortal.gif

PicklesVaccume.gif

PicklesBullet.gif

PicklesSwitch.gif

PicklesGrenade.gif

PickleSBoss.gif

PickleSBoss2.gif


  • 멀티플레이

Picklesmulti1.gif Picklesmulti2.gif Picklesmulti3.gif

포스터

PicklesPoster.PNG



  • 실행파일
- https://github.com/Team-Pickles/Client_realese.git
- clone 후 BASEMENTCLEANER.exe 실행

PicklesFile.PNG

관련사업비 내역서

Pickles사업비.JPG

완료작품의 평가

Pickles평가.JPG

향후계획

가. 어려웠던 내용들

◇ Unity Engine에 익숙해지는 것

- 유니티에 익숙하지 않아서 새로 배우는 느낌으로 했습니다.
- 유니티에서 API요청을 보내면서 자동으로 생성되는 Buffer를 해제해주지 않아서 발생했던 문제가 알아차리기 어려웠습니다.

◇ 서버 아키텍쳐 설계

- 네트워크 엔진을 사용하지 않고 서버를 설계해서 room based dedicated server 구조를 설계하는 것이 어려웠습니다.

◇ 멀티 스레드/ 코루틴 에서의 race condtion, crital aria 찾는 것

- 이미 사라진 객체를 다른 스레드에서 참조해서 발생하는 오류등의 정상화가 어려웠습니다.
- 서로 다른 코루틴이 동시에 실행되어 생기는 문제들의 원인을 찾기 어려웠습니다.


나. 차후 구현할 내용

◇ 클라이언트

- 소리 변경 UI 
- 4번째 스테이지 
- 추가 SFX 
- 버그 수정 

◇ 서버

- 맵 에디터에서 로컬 저장된 맵 불러와서 수정하는 기능 
- 맵 에디터에서 덮어쓰기가 가능하도록 
- 조금 더 자셰한 로그 
- 예외처리 세분화 
- P2P 기반 멀티플레이 
- 버그 수정