Post

[ PROJECT/유니티 ] 2023. 4. 1. 23:41

게임프로젝트를 이번 상반기동안 진행하게되면서 작년 게임을 엎었습니다.

엎은거라기엔 겉보기 모습이 다른건 없지만, 기존 코드를 아예 싹 다 갈아엎었습니다.

 

그래서 3월동안은 기존 작업했던것들을 엎으면서, 

이전에 피드백 받은 부분들에 대해서 보완할점을 고쳤습니다.

 

1. 정보 JSON변환 및 스테이지 맵 생성기 제작 

기존 작업물에서는 스테이지 정보가 오브젝트로 다 들어가 있었습니다.

한 챕터마다 게임씬이 따로있고, 그 게임씬에는 해당 챕터에 존재하는 많은 스테이지들이 오브젝로 있고,

그 오브젝트안에는 스테이지에 맞게 또 플레이어 캐릭터들, 맵 오브젝트, 장애물 오브젝트가 들어가 있습니다.

 

음.. 메모리를 떼어놓고 봐도 이건 너무 아닌거같죠?? 

그래서 어차피 게임은 다 똑같이 돌아가고, 크게 다른건 스테이지 디자인요소 일테니

하나의 게임씬(화면)에서 모든 챕터를 관리하고 겹치는 요소를 또 다시 생성되지않게

만드는것을 목표로 수정을 해나갔습니다.

이전 레벨디자인했던 스테이지에 대한 정보들을 모두 JSON형식으로 변환하였고

게임이 시작될때 해당 데이터들을 불러와서 배치하는 형식으로 하였습니다. 

 

현재는 스테이지 번호도 메겨져 있는형식이지만, 앞으로 스테이지 데이터를 새로 추가하고

레벨디자인을 위해 스테이지 순서를 조정해야할때를 대비해서 아마 수정이 더 필요할것같긴합니다.

 

스테이지 외에도 캐릭터와 기믹의 위치도 데이터화 시켰으며

해당 데이터들은 화면내에서 어느곳에 위치해야하는지와 

최대한 중복되는 데이터가 없도록 하였습니다.

 

확실히 이렇게 하니 챕터 구분만 해준다면, 스테이지는 항상 동일한 위치에 존재하기에

코드라던가 오브젝트들의 경우에도 신경써야할것들이 없었습니다.

구혀하면서의 에러사항은 기본 베이스 맵을 최대 사이즈인 7X7 사이즈로 하였기에

스테이지 맵의 크기가 작아지면 카메라에 보이는 화면이 작기에 카메라가 확대할 수 있도록 하였습니다.

하지만 단순확대만은 정답은 아닐것같기에 이 부분에 대해서는 계속해서 보완해나갈것입니다.

 

 

2. 캐릭터 움직임 코드 리팩토링

사실 이 부분에 대해서는 움직이는 틀에서는 저번 작업과 바뀐것이 없습니다

하지만, 코드상에서 기존에는 다 따로따로 움직여주고 어느 방향으로 갈때

움직이는 코드들이 모두 중복되는 것을 리팩토링하였습니다.

코드를 수정하게되면서, 기존 코드가 사라져 깃허브를 통해 비교를 해보자면

먼저 캐릭터와 우주선 모두 어느방향으로 간다는 함수가 다 따로 존재하였습니다.

하지만 이동하는 코드함수를 다 똑같이 부르는데 매개변수가 다르다고 해서 함수를 따로 존재시켜야하는건 너무 낭비죠.

 

그래서 오른쪽처럼 하나의 함수로 합쳐주었습니다.

그리고 그 전에는 캐릭터들이 움직일때마다 각자의 클래스 내에서

땅이 있는지 없는지 여부를 판단해 이동을 하게되었지만 현재 스테이지 맵(땅 유무) 데이터를 

가지고 있기에 데이터를 통해 유무를 판단하여 캐릭터들에게 움직임 명령을 주었습니다.

그리고 기존에는 오브젝트 인스펙터창에 있는 EventTrigger에다가 움직이는 함수를 하나하나 배정시켰으나

스크립트를 통해 함수를 지정하는 법을 알게되어 스크립트에서 쉽게 수정하고 지정할 수 있도록 하였습니다.

 

플레이어 캐릭터, 우주선 캐릭터 모두를 움직이도록 관할하고 있는 클래스에서는

이때까지 존재하던 각 캐릭터의 움직임 함수를 하나로 합치도록 하였습니다.

그리고 중복되는 코드들을 하나의 코드로 합칠 수 있다면 합치도록 하였습니다.

 

이전에는 UFOMove클래스에서 UFO가 움직이고, 동물이 있다면 빨아들이는 코드를 모두 구현하였습니다.

클린소프트웨어 책과 다른 사람들의 코드, 피드백, 말들을 보고 들으면서

클래스 하나 에는 해당 클래스가 작동하는 목적 하나만 충실히 실행하도록 해야 좋은것이라는 것을 보고 느끼면서

기존 UFOMove클래스 내 동물 탐지와 빨아들이는 코드는 UFOTake클래스에 새로 옮겼습니다.

 

그리고 RayCast를 할때 레이어마스크를 활용하기위해 enum으로 레이어들을 모두 기록해두었습니다.

참고로 UFO가 사용할 캐릭터들 레이어의 경우 따로

레이어들의 값을 모두 판별할 수 있도록 값을 저장했습니다.

 

 

3. 기존 게임 분석 및 기획

제가 만들고자 하는 게임과 유사한 게임을 직접 해보고 분석해보면서

내가 만들 게임에는 어떤 컨텐츠가 있으면 좋을지,

또 UI는 어떻게 배치하면 좋을까를 많이 고민해보았습니다.

 

기존게임들을 직접 플레이를 하면서는 아무래도 사용자 친화적인가가 많이 와닿았고 

검색을 하면서 분석할땐 게임이 가진 컨셉과 디자인이 눈에 많이 들어왔습니다.

 

이 과정에서 기획의 틀이 잡히게 되었는데, 그건 다음 게시물에서 얘기하도록 하겠습니다.

 

 

.

.

.

 

 

하면서 힘들었던 점은 기존 코드에서 사용할 부분과 버릴 부분이 명확하지 않았고

그대로 쓰면서 새로운 코드와 잘 연결되도록 할려다보니 더 보이지 않은 오류가 많았던것같습니다.

 

코드를 정말 말 그대로 다 공백으로 하고 난 다음에 다시 처음부터 구현할 수도 있긴하지만

현재 코드의 문제점을 보면서 직접 수정하다보니 이렇게 하면 안되겠구나를 많이 깨닫게 되어서 좋았습니다.

 

물론 남의 코드도 아니고 불과 몇개월전의 제 코드지만 역시 과거의 코드는 항상새롭네요 ㅋㅋㅋ

아, 하지만 코드가 너무 별로라고 생각이 들면 다 갈아엎은 것들도 있긴합니다.

그래서 그런지 처음부터 프로젝트를 시작하게 느끼게된건 이런점들이 큰것같습니다.

▲ top