본문 바로가기
Project

[공모전/게임잼] 대한민국 No.1 서버 게임 개발 공모전 / 제 2회 포톤 게임잼 - Photon Game Jam 예선 참여 후기 및 Photon 이용 후기

by 배애앰이 좋아 2024. 8. 6.
반응형

 

 

안녕하세요 오랜만에 프로젝트 관련된 글을 작성하게 되었습니다.

요즘 회사 그만두고 프리랜서를 뛰다가 이 마저도 끝나서 심심한 찰나에 이렇게 빈 시간에 여러가지를 도전해보자 해서 참여하는 활동들이 몇 개 있습니다. 이 중에 한 개를 이 글을 통해 공유해볼까 합니다. 

 

참여한 공모전은 게임 공모전으로 게임 개발자라면 한번 쯤 들어보셨을 Photon에서 여는 공모전 참여하고자 해당 프로젝트를 시작하게 되었습니다. 요즘 꿈이 모든 장르 게임 한번 씩 만들기인데 멀티 게임은 한번도 안 만들어 봐서(회사 프로젝트 외 개인적으로) 흥미가 가더라고요. 

 

 

위 포스터를 통해 관련 공모전 내용을 자세히 보실 수 있습니다. 

현재는 팀 접수 후 1차 예선 제출을 위해 게임을 만들고 있습니다. 그래서 제일 중요한 무슨 게임을 만드는가?? 이거에 관해서는 기존에 같이 작업해오던 디자이너 분이랑 이 공모전 전에 간단한 게임을 만들고 싶다는 이야기가 나왔는데요 그때 나온 게임 아이디어가 있었습니다.

 

뭔가 천국의 계단처럼 조작 방법이 아주 간단하고 귀엽도 고양이가 있는.... 사심 가득한 게임이죠ㅎㅎ 그래서 클릭커 게임 장르로 하고자 했고 다음과 같은 기획이 잡혀있게 되었습니다.

 

UI 디자인 프로토타입

 

보시다싶이 레일 위에 음식이 내려오고 터치를 통해 고양이가 알맞은 음식을 먹게 하는 게임이었습니다. 다만 위 게임은 솔로 게임에다가 최고 기록을 세우는 게 목표이기 때문에 멀티 게임 기획은 아니였고 따로 만들까 싶었는데 그래도 어차피 만들 거 복잡하게 따로 하기 보다는 합쳐서 만들어보자! 라는 쪽으로 이야기 나오게 되어 위의 기획을 변경해서 멀티 게임으로 만들고 포톤 게임잼 공모전에 내기로 하였습니다.

 

그리하여 변경된 기획은 솔로모드랑 듀얼 모드랑 아예 따로 만들어서 듀얼 모드에서는 PvP 전으로 가기로 했습니다.

 

UI 디자인

 

보시다싶이 이름을 적고 매칭을 기다린 다음에 매칭이 잡히면 싸우는 걸로!! 내 누가 먼저 음식 뺏나 싸움이 되어버린 것입니다. 그러다가 더 빠르게 높은 점수를 내는 플레이어가 이기는 쪽으로 잡게 되었습니다.

 

예선이 많이 남지 않아 급한대로 아래와 같이 기획했지만,

 

 

일단은 듀얼 모드를 만들었습니다.

현재 개발 결과물은 아래와 같습니다.

 

게임 제목 : 쭉쭉 내려가는 레일 위로 고양이가 폭식합니다.

게임 장르 : 캐주얼, 클릭커, 아케이드

게임 타켓층 : 전연령, 고양이를 좋아하는 사람들, 심플한 게임을 좋아하는 유저들

게임 이용 플랫폼 : 모바일(Android)

게임 방식 :

고양이 플레이어가 레일 위로 내려오는 음식 중에 알맞은 음식을 타이밍 맞춰서 먹어 점수를 얻는 게임으로 솔로 모드와 멀티 모드가 존재합니다. 

솔로 모드 : 좌 우에 배치된 고양이는 각각 먹을 수 있는 음식이 다르며 잘못 먹을 때마다 하트가 없어지며 5개의 하트가 없어지면 게임이 끝납니다. 최대 기록을 세우는 게 목표이며 플레이할 때마다 솔로 모드 재화를 얻어 고양이 뽑기를 해 새로운 고양이를 얻을 수 있습니다.

듀얼 모드 : 두 고양이 플레이어끼리 누가 먼저 빨리 음식을 먹는지 순발력 PvP 게임입니다. 빠르게 100점에 도달하는 플레이어가 승리하며 승리한 플레이어는 듀얼 모드 재화를 얻어서 고양이 악세사리 뽑기를 해 고양이를 꾸밀 수 있습니다.

그 외 : 뽑기, 상점, 꾸미기 콘텐츠가 있으며 상점에서는 광고를 보고 재화를 쉽게 얻을 수 있으며 꾸미기에서는 고양이의 종류를 바꾸거나 고양이에게 악세사리를 달 수 있습니다.

 

초안 기획안

 

 

일단은 나름 문제없이 잘 작동되어서 신기했고 생각보다 포톤 사용이 안 어려워서 좋았던 것 같습니다.

 

 

그렇다면, 다음 주제로 넘어가서 Phonton 이용 후기에 대해 작성해볼까 합니다.

저 같은 경우 Photon 개발하는데 있어서 아래의 유튜브 영상을 많이 참고 하였습니다.

링크 : https://youtu.be/9Bn1C9O0hzY?si=_iBNh__5goI2Am7Q

 

 

짧은 시간 안에 어느 정도 멀티 게임의 틀을 알려주시는 고마운 영상이었습니다. 

그리고 에셋 경우, 아래와 같은 phonton 에셋을 사용했는데 사실 공모전에 보면 엄청 photon 종류가 많은데 시간이 많지 않아서 그런 부분들을 하나하나 보고 적용하지 못한 점이 아쉬웠습니다.

 

PUN 2 - FREE 링크 : https://assetstore.unity.com/packages/tools/network/pun-2-free-119922

 

 

게임 내에서 포톤 사용한 부분과 고려했던 점은 

 

1. 플레이어 매칭 

2. 게임 동기화 (게임 오브젝트, 플레이어 애니메이션, 동작, 점수) 및 판정

 

이 두 개가 가장 크지 않을까 싶습니다.

 

1. 플레이어 매칭

 

먼저, 플레이어는 자신의 특징을 나타낼 수 있는 이름을 매칭 전에 적게 해놓았으며 이름을 적고 누르면 photon 네트워크와 연결되면서 방을 찾거나 방을 새로 만들게 됩니다.

 

 

이때 위에와 같은 로직을 구성하게 되었습니다. 일단 방을 있는지부터 확인하기 위한 bool 형 변수를 만들고 현재 방 목록을 순회하면서 빈 방을 찾습니다. 이때 빈 방의 조건은 플레이어가 max 로 차있지 않고 해당 게임을 이미 진행한 방이 아닐 경우(gameStarted 변수)로 해주었습니다. 이러한 변수를 둔 이유는 게임이 종료되고 플레이어가 바로 방을 나가기 보다는 점수 등을 확인하고 나가기 때문에 그때까지 기존에 진행했던 오브젝트들이 그대로 남아있길 바랬습니다. 근데 이때 문제가 한 명의 플레이어가 나가면 그 방에 게임 끝났어도 플레이어가 다 차지 않아서 다른 플레이어가 들어올 수 있는 문제가 있었습니다. 그런 문제를 해결하기 위해 방 옵션으로 gameStarted 변수를 생성해주고 게임이 시작한 방은 true 바꿔서 새로운 플레이어가 해당 방에는 못 들어오게 만들었습니다.

 

그 이후, 만약 남는 방이 없다면 방을 생성하게 되는 데 이때 방의 이름이 겹치면 안되기 때문에 공유한 방 이름 생성을 위해 시간 데이터를 사용해주게 되었습니다. 그 이후에는 위와 같은 이유로 gameStarted 변수를 생성해주고 플레이어 2명으로 제한 두어줬습니다.

 

2. 게임 동기화 (게임 오브젝트, 플레이어 애니메이션, 동작, 점수) 및 판정

 

그 다음으로 신경 쓴 부분은 아무래도 제일 중요한 게임 동기화와 판정이었습니다. 저희 게임은 그림과 같이 레일에서 내려오는 음식을 누가 먼저 빨리 먹느냐에 대한 승부이기 때문에 불공정한 판정을 피하기 위해 동기화와 판정이 중요했습니다. 크게 생각한 로직은 플레이어 2명이 입장하면 호스트와 클라이언트로 구분하고 호스트가 게임을 실행시키면(예를 들면 음식을 생성하거나 이동시키는 부분들) 이 부분들을 클라이언트에 동기화 해주는 방식을 생각하게 되었습니다.

 

 

음식의 위치를 최대한 동일시키기 위해 각 음식마다 photon view 를 달아서 아래와 같이 위치를 동기화해주었습니다.

 

 

그 다음에 아래와 같은 연결을 해주었습니다.

이때, 모든 것이 최대한 같은 타이밍에서 이루어지고 네트워크 간의 딜레이 영향을 한 쪽만 받지 않기 위해서 호스트 측에서 데이터를 보내고 난 후 모든 클라이언트가 데이터를 받아드릴 때, 생성하거나 판정을 하도록 만들었습니다. (결과적으로 행동은 후에 이루어지도록)

FoodCreateAndMove : 현재 받은 데이터를 생성하여 움직이는 것을 동기화하는 함수

CheckMoveEatFood : 현재 받은 데이터를 통해 플레이어가 제대로 맞는 음식을 먹었는지 확인하고 점수 반영 함수

CatGetAnimaion : 플레이어가 클릭했을 때, 발생하는 고양이 애니메이션 동기화하는 함수

 

 

아래는 내 점수와 상대방의 점수, 현재 올바른 음식의 인덱스 번호를 실시간 변수 동기화를 해주었습니다.

 

 

원래 초반에는 각자 게임 상태에 대한 주도권을 가진 채 플레이하고 동작과 점수만 동기화하려고 하였지만 직접 플레이하면서 네트워크 딜레이가 조금이라도 있을 시에 문제가 생기고 판정에 크리티컬한 오류를 주게 되어서 위에와 같이 호스트가 주도권을 가지고 게임 상태를 보내는 식으로 바꾸게 되었습니다. 

 

마지막으로, 제작한 게임 영상을 올려봅니다.

 

 

 

긴 글 읽어주셔서 감사합니다!

많은 관심 부탁드리며 예선에서 뭐라도 상 타면 좋겠네요ㅎㅎ 

 

 

반응형

댓글