블로그 이미지
한국IT전문학교 게임프로그래밍 2018년 졸업생 / 배우고 익히고 정리하는 곳 무명의 공룡

카테고리

분류 전체보기 (133)
Unity (5)
AR / VR (8)
홀로렌즈2 (2)
Unity 3D 액션 게임 제작 (2)
정리 (9)
소소한 배움 (6)
그외 (7)
비공개 (56)
--이전 프로젝트들-- (0)
Tree-sha (팀 3D) (9)
Icicle Game (2D) (19)
MMD RPG (3D) (9)
Total
Today
Yesterday

달력

« » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

공지사항


게임화면입니다. 뒷배경은 메인화면과 같은 것을 사용하고 있습니다.


이전 버전에서는 화면 안에 벽을 또 두어서 거기서부터 고드름이 생성되고 가뜩이나 폰을 세워서 하는 방식이라 양옆이 좁았는데 더 좁게 만들었었죠.


당시에는 영역을 더 명확하게 하고 UI가 고드름을 가려서는 안된다는 생각 뿐이어서 그렇게 했는데 친구들 시켜보니 다 없애라고 해서 없앴습니다.


없앤건 좋았지만 아무래도 이 게임은 고드름이 가장 느린 맨 위를 자주 보게 되어서 UI의 위치 변경이 필요하다 느꼈고 아래로 옮겼습니다.


다만 예외적으로 경과 시간만 중앙으로 이동했는데 이것도 친구 의견이었습니다.


저는 처음에 이게 이목을 끌어 게임에 방해가 될 것이다 생각했는데 의외로 고드름 보는데 방해가 되지 않았고 오히려 버틴 시간이 중요한 클래식 모드에서 따로 시간을 보기위해 눈을 옮겨야 하는 불편함이 줄어 더 좋더군요.


다만 일부는 오히려 이목을 너무 끌어 방해가 된다는 의견도 있었습니다. 그래도 전반적으로 평이 좋아 놔두고 있습니다.



게임 씬은 모드별로 씬이 구분되어 있습니다.


현재는 클래식 모드 씬과 빙하기 모드 씬으로 나뉘어 있는데 아무래도 기본 틀은 동일하다보니 겹치는 부분이 많습니다.


시작 화면은 둘 다 위 이미지와 동일하고 떨어지는 고드름과 나오는 캐릭터, 튀어나오는 코인 등 UI까지 전부 동일합니다.


코인 생성 방식 정도는 다르게 할 생각도 있긴 한데 결국 동일한 부분이 많은 것은 변하지 않습니다.


그래서 이 부분에 대해선 고민이 많았습니다.


1. 프리팹을 믿고 거의 동일한 2개의 씬을 가지고 갈 지 

2. 씬 병합을 이용하여 공통 씬을 하나 두어서 진행할지

3. 하나의 씬에 몰아넣고 초기화 과정에서만 다르게 할지


결론은 1번을 택했습니다.


2, 3번의 공통점은 공통 부분을 정하고 가는것에 있는데 아직 세번째 모드가 남아있어서 공통부분을 뭐라 딱 정할 수가 없었습니다. 



씬에 대한 글은 이쯤 하고 초기화 부분으로 넘어가겠습니다.


게임 씬은 메인 씬과 다르게 UI만으로 이루어져 있지 않습니다.


UI는 UI지 게임과는 별개니까요.


움직이지 않거나 버튼 부분은 전부 UI이고 그외 캐릭터, 고드름, 코인은 2D Sprite로 생성되어집니다.


모드 공통으로 초기화 과정은 플레이어 캐릭터 초기화와 오브젝트 풀 연결 과정이 이루어집니다.


캐릭터는 싱글톤으로부터 업그레이드 된 수치들을 가져와서 자신의 스탯에 더해집니다. 현재는 체력과 경직이 바뀌겠네요.


고드름과 코인은 미리 300개와 1000개를 만들어서 풀을 만들어두고 있습니다.


좀 많다면 많긴 한데 어디서 듣기로 적당히 풀을 만들고 도중에 요구량이 늘면 그때 추가하는 것 보다는 아예 처음부터 넉넉하게 만들어두는게 사양면에서 더 좋다는 소리를 들어서 이렇게 했습니다.


로딩시간이 다소 늘어나겠지만 아직은 폰에서도 길다고 느껴질 정도의 로딩은 아닙니다.


다만 메인화면에서 처음 넘어오는 경우는 어쩔 수 없지만 게임 재시작의 경우에도 다시 씬 로딩을 거치기에 똑같은 로딩을 매번 반복하게 됩니다.


그래서 재시작에 한해서 다시 씬로딩을 하는것이 아닌 위치값만 재조정 하게 바꿔 줄 예정입니다. 이러면 아마 로딩 시간이 거의 없어지겠죠.



다음은 캐릭터 설명입니다.



고양이라고 우겼던 캐릭터가 정말 고양이가 되어서 돌아왔습니다.


상점에서도 볼 수 있지만 흰 몸이 베이스이고 나중에 스킨 개념으로 여러가지 복장을 내볼 생각입니다.


현재는 이게 기초 복장이라 옷과 몸을 분리해두진 않았는데 훗날 스킨이 추가되어 옷이 변경되야 한다면 던파처럼 베이스는 놔두고 옷만 따로 만들어 위에 덮어씌우는 방식을 택할지 캐릭터까지 통째로 바꿀지는 아직 고민 중입니다.


던파처럼 부위가 여러개라면 당연히 전자의 방식을 택해야겠지만 지금은 그렇게까지 할 생각이 없거든요.


위 이미지에서 볼 수 있듯 초록색 사각형이 콜라이더 영역입니다.


몸통에 쳐둔건 발과 벽, 그리고 코인에 반응하는 콜라이더이고 머리에 따로 떨어져있는게 히트박스입니다.


원래는 히트박스까지 하나였는데 고드름에 발 맞고 죽으니까 기분이 나쁘다는 말이 들어와서 머리에 꽂혔을 때만 피격 되도록 하였습니다.


물리 레이어를 통해 몸통에는 고드름이 맞지 않도록 했습니다.


이동은 GetAxisRaw를 이용하여 스마트폰 외의 환경에서도 조작이 가능하도록 하였고 스마트폰에서도 가능하게 하기 위해 UI 버튼을 활용하여 버튼을 제작하였습니다.



기본으로 주어지는 onClick으로는 제가 원하는 움직임을 구현할 수 없었기에 이벤트 트리거를 활용했습니다.


위와 같이 적용하면 터치(마우스) 포인트가 버튼 영역 위에 있는지만을 구분하여 움직입니다. 실제로 PC버전으로 게임을 실행하여 마우스를 대보면 클릭하지 않아도 캐릭터가 움직이는 모습을 볼 수 있습니다.


폰에서는 급한 마음에 영역 밖에서 터치를 시작하더라도 이후 영역에 들어가기만 하면 캐릭터가 움직이게 됩니다.


앞서 메인 분석 글에서 적어둔 스크립트에서 인터페이스를 활용해도 구현할 수 있습니다.


캐릭터의 모션은 애니메이션을 통해 움직입니다.



마지막으로 오브젝트 설명입니다.



고드름과 코인입니다.


캐릭터를 포함하여 이 3개에는 전부 콜라이더와 물리연산이 들어갑니다.



그리고 고드름이 떨어져서 깨지면서 나오는 파편 5개에도 모두 들어갑니다.


처음에는 임시적 연출효과를 위해 넣은 기능인데 생각보다 많은 사양을 먹지는 않더군요.


갤럭시 s2에서도 거의 프레임드랍이 느껴지지 않아서 일단은 이대로 가기로 했습니다. 만약 나중에 다른거 추가하다 프레임 드랍이 느껴지면 파편 연출이 아마 제일 먼저 바뀌겠지요.


코인에는 Physics2D Material이 들어갑니다. 통통 튀고 미끄러지는 느낌을 줍니다.


생성은 int 값을 하나 가져서 ++하면서 배열로부터 차례대로 가져오는 방식을 취했습니다.


만약 해당 순서의 오브젝트가 아직 사라지지 않았다면 기존에 있는 것은 삭제되고 다시 생성됩니다.


고드름은 이럴 일이 없는데 코인의 경우는 선입선출의 공식이 통하지 않기에 매우 드물게 일어납니다. 하지만 보통 1000개가 다 생기기 전에 죽거나 코인을 먹게 되는데다 눈치 채기도 힘들어서 다른 방식으로 했다가 돌려놨습니다.



코인은 고드름이 땅에 닿아 깨지면 생성되는 공식이 어느 모드든 똑같습니다. 빙하기 모드의 경우 너무 많은 코인 수급이 가능하다고 보여 추후 빙하기 모드에서만 코인 수급 방식을 변경할 예정입니다.


클래식 모드의 고드름은 단순한 로직을 가지고 있습니다.


화면 위에서 생성되며 화면의 넓이 내에서 랜덤하게 출현합니다.


그리고 5초 간격으로 출현 간격이 짧아집니다.


난이도 상승률은 



거의 이런 형태로 올라갑니다.


대략 60초까지는 굉장히 쉬운 편이고 난이도 상승치도 높지 않은데 그 이후부터는 왕창 상승합니다.


대략 100초 쯤 되면 최대 난이도에 도달하며 1초에 50개의 고드름이 떨어집니다.


고드름이 떨어지는 개수 = 생겨나는 코인의 개수


공식이 성립하는 이 게임 특성상 1분씩 5판의 게임을 하는 것보다 100초까지 버틴 한 판의 게임이 아마 더 많은 코인을 벌 수 있을겁니다.



빙하기 모드의 고드름은 정해진 패턴이 몇 개 준비되어 있으며 그 안에서 랜덤하게 나타나는 방식입니다.


클래식이 운에 중점을 두었다면 빙하기는 학습에 중점을 두었습니다.


현재는 테스트 단계인데다 난이도도 어느정도로 해야할지 몰라서 기본적으로 체력을 3개 다 주고 있습니다만 아마 다음 버전에선 자리가 잡혀있지 않을까 생각합니다.


패턴은 엑셀로 만든 후에 csv 파일로 저장하여 이용하고 있습니다.


검색해보니 현업에서 이런식으로 자주 쓴다고 하더군요. 


csv 파일을 읽어들이는 스크립트는 그냥 인터넷에 있는거 썼습니다. 어지간해서는 직접 만드는 것을 선호합니다만 이걸 알아냈을 당시에는 csv 파일 자체를 처음 들어서 직접 짜고 말고 할 수준이 아니었습니다.



엑셀로 공식을 사용하여 50프레임 Fixed Update 환경에 맞도록 값을 변환시켜준 후 게임을 실행시켜보면 이런식으로 알아서 패턴 개수, 차례대로 떨어지게 할지 한 번에 떨어지게 할지 등 값들이 기입됩니다.


Fixed Update 환경을 이용하는 이유는 그냥 일반적인 코루틴과 시간제어를 활용했더니 입력대로 정확히 나오지도 않고 어쩌다 한 번씩 프레임이 튀기라도 하면 그 패턴은 아주 작살이 나버려서 도저히 사용할 수가 없었습니다.


팀프로젝트 게임처럼 딱히 완전 등간격을 지키지 않아도 되는 게임은 상관없지만 이 게임은 완전 등간격이 아니면 그 부분이 티가 바로 나버려서...


다른 게임에선 어떻게 관리하는지 모르겠네요.


아무튼 현재는 한 번에 여러개를 떨어뜨리거나 일렬로 차례대로 떨어지게 하는 방식 밖에 없지만 추후 이런 기본적인 형태 뿐만 아니라 색다른 것들도 추가할 예정입니다. 3개로 분할하는 고드름이나 아래에도 무언가 깔리거나 플레이어의 움직임에 따라 판정이 바뀐다던가 등...


못해도 20개 이상의 패턴을 만드는게 목표입니다.




이번엔 마땅히 코드를 넣을만한 부분이 없어서 코드 없는 글이 되었네요.


그래도 혹시라도 궁금하신 부분이 있으면 올려드리겠습니다.


여담으로 3번째 모드로 구상 중인 러너모드는 



대략 이런 느낌으로 구상 중입니다. (메탈슬러그 4 엔딩 분기점)


뒤에서 오는 폭발 대신 고드름이 계속해서 떨어지고 앞에 장애물이 있고 뭐 그런식...


고드름 떨어진 자리엔 또 랜덤하게 코인이 튀어나올텐데 이걸 이용해서 아슬아슬하게 가는 사람은 코인을 더 많이 먹는거죠.


물론 구상 단계라 어떻게 나올지는 모릅니다.


'Icicle Game (2D) > 분석' 카테고리의 다른 글

1.03버전 분석 5 (로딩)  (0) 2018.01.12
1.03버전 분석 4 (상점화면)  (0) 2018.01.12
1.03버전 분석 2 (메인화면)  (0) 2018.01.10
1.03버전 분석 1 (서론)  (0) 2018.01.09
정리  (0) 2017.12.06
Posted by 무명의 공룡
, |