ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스파르타 최종프로젝트 1일차
    게임 개발기록 2024. 6. 27. 23:32

    1. 제작 할 게임 선정.

     

    처음에는 완성도를 높일 수 있는 게임을 제작할지, 내가 원하는 기술의 숙련도를 올릴 수 있는 게임을 제작 할지 고민 했다.

    그 때 튜터님께서 용사의 탑이란 게임을 추천 해주셨다. 개인 프로젝트인 내가 제작 하기에 제일 괜찮은 선택인 것 같아서 그것을 기반으로 게임을 만들어 보기로 했다. 

    용사의탑 이미지

     

    처음에는 용사의 탑과 아예 똑같은 방식으로 제작을 하려고 했지만 튜터님의 반응이 아예 똑같이 하는 것보단 참고만 하고 다른 유형의 게임을 만들라는 것 같아서 에셋들을 뒤지고 아이디어를 생각 해내야 했다. 

     

    아이디어를 먼저 떠올리고 에셋을 끼워 맞추려면 힘들었기에 에셋을 먼저 찾고 에셋에 맞춰서 제작을 하기로 했다. 

     

    에셋을 찾다보니 괜찮은 에셋이 있었다. 

    캐릭터가 많다.

     

    용사의 탑처럼 캐릭터를 계속 보내는 게임을 제작 할 것인데 우선 캐릭터가 많고 특징들이 똑같다. 

     

    그래서 이 에셋을 활용해서 게임을 만들어봐야겠다 생각 했다. 캐릭터를 계속 땅굴로 보내서 땅을 파는 것이다. 

    초기 구상안

     

    하지만 이렇게 할 경우에 고민 해야 할 부분이 많이 생긴다. 처음엔 용사의탑과 똑같이 할 생각이였어서 코드만 어떻게 해야할지 생각 했으면 됐는데, 이거는 방식이 조금 바뀌어서 생각 할 것이 많아진다. 

     

    먼저 용사의 탑은 탑에 있는 몬스터를 죽이면 탑이 계속 생성이 되는 형식인데 이부분은 어떻게 할 것인지,

    그리고 용사의 탑은 탑을 오르더라도 밑에 층에서 계속 몬스터가 생성이 되는데 이부분은 어떻게 할 것인지 고민을 해야 했다.

     

    일단 지금 튜터님께 여쭤봤는데 답이 없으시다. 바쁘신 걸까 이게 별로인걸까.

     

    =============

    튜터님께서 괜찮다고 하신다. 이 느낌으로 게임을 개발 하기로 결정 한다. 튜터님께서 근무를 하시면서 바쁘신데도 일일히 답장을 해주시는 게 너무 감사하다..!

     

    시간은 많이 없기에 더 고민 할 시간은 없다. 바로바로 다음으로 넘어간다.

     

     

    2. 게임구조 만들기

    지금까지 프로젝트를 하면서 코드를 수정 했던 적이 매우 많았기에 어차피 혼자겠다. 피그마부터 싹 다 구석구석 기본구성부터 짜두기로 했다. 

     

    그러기 위해서 용사의 탑부터 분석을 다시 했다. 

    피그마에 작성한 내용

     

    좀 더 깊고 사진들도 많이 넣고 싶었지만 여기까지 하고 이제 이 게임을 참고해서 게임구성을 어떻게 할지 고민을 해야 했다.

     

    피그마에 작성한 내용

     

    먼저 이렇게 큰틀만 만들어 봤다.

     

    그 다음에 이제 화면구성이 어떻게 되는지, 땅은 어떻게 만들어 질것인지 유닛은 어떻게 행동하고 능력치 구조는 어떻게 할 것인지 이런 디테일 적인 것을 하나하나 다 정하면 된다. 오늘 안에 끝내야 하고, 어차피 혼자겠다 아주 오래 고민을 할 것이다.

     

     

    3. 게임제작설계? 디테일 구성

    먼저 시작화면부터 계획을 해보기로 했다. 더 추가 하고 그러는 건 나중에 일단 용사의 탑을 최대한 따라한다. 

    시작화면구성

     

    시작 화면을 이런 식으로 구성 해봤다. 이렇게 만들어 놓은 다음에 코드 구성을 어떻게 할 것인지 고민 하는 것이다.

    코드구성하기

     

    이렇게 화면구성을 만들어 두고 여러 기능들을 어떻게 만들 것인지 계획을 먼저 하고 있다. 게임 모든 것을 먼저 다 계획 하고 프로젝트 제작을 시작 할 예정이다. 

     

     

    ====================

    튜터님이 프로토가 우선이라고 말씀 해주셨다.

     

    프로토를 만들어보고, 재미검증 단계를 거친 다음에 원래 제대로 된 프로젝트가 시작되는거라고 말씀 해주셔서 바로 프로토 타입부터 만들어 보기로 변경 한다. 

     

    클릭 하면 유닛을 소환 하고 소환 된 유닛은 자동으로 땅을 파야 한다. 어떻게 할까.

     

    4. 프로토 타입 만들기

    유닛을 소환 하는 건 두 번째로 미루고 먼저 유닛을 만들고 만들어진 유닛은 자동으로 행동을 해서 땅을 파야 한다. 

     

    내 생각은 일단 땅은 파지는 것과 안 파지는 것으로 나누고, 파지는 땅은 Rayer를 설정 해서 유닛은 그 레이어를 찾고 가서 땅을 파는 로직을 수행, 체력이 다 닳으면 없어지기, 땅의 체력을 다 깍으면 땅 파지기를 실행 하면 될 것 같다.

     

    =============

    시작부터 뭔가 어렵다. 

    게임 생긴 거 보고 쉬울 줄 알았는데 유닛이 자동으로 움직이게 하는 것도 좀 쉽지가 않다. 

     

    처음에 Nav mesh 이용해서 AI 움직임을 구현 하려고 했지만 2D는 적용이 안 된다고 한다. 2D로 하려면 유저들이 만든 사제 플러그인을 사용 해야 한다고 하는데, 그걸 공부 해야 하나 하다가 튜터님께 가서 무슨 방법이 있을까를 물어봤다. 

     

    튜터님은 배열과 리스트를 이용해 정보들을 계속 남겨두고 부서지는 땅은 0, 깨진 땅은 1 등등을 해서 지형을 만들고 유닛이 그걸 계산 해서 움직이게 하는 방법을 추천 해주셨다. 

     

    굳이 AI nav mesh를 사용 하지 않을 것 같다고 한다. 연산량도 높고, 그런데 배열, 리스트 링크드리스트 등등을 들어봤는데 무슨 소리일까 ..., 대충 감은 오지만 어떻게 해야 할지 복잡한 것 같다. 

     

    땅의 정보를 배열과 리스트로 저장 ,,,, 유닛은 그걸 계산 해서 이동...

     

    우선 지형 생기는 것부터 해봐야겠다. 좀 어렵다. 

     

    지형이 이런 규칙으로 생성이 되어야 한다. 이걸 배열로써 만드려면.., 규칙이 흠... 아니지 너무 어렵게 생각 하고 있었다. 

     

    그냥 지형 한층을 만들어서 생성을 하면 되는 거군. 00001 00001 11111..., 부수면 1을 2로 바꾸고.., 한 번에 생성 하는 걸 

     

     

    //

    List[ i ]
    11111
    00001
    11111
    10000

     

    이런 느낌으로 지형이 생성 되게 하고 반복문을 돌려서 1번을 찾고 그 1번으로 향하게 한다. 아 쉽지 않네

    머리가 터질 것 같다. 

    일단 프로토타입을 만들라고 한 튜터님의 말씀을 따라야 하는데 쉽지가 않다. 

     

    프로토타입의 목표, 배열을 사용한 맵 생성, 파괴 되면 배열의 값을 바꿈. 

    배열을 사용한 유닛의 자동 이동, 유닛 자동생성 

     

    이거인데 이거 너무 힘들다. 

     

    일단 맵생성까지는 어떻게 할 수 있겠는데 유닛이 배열 값 찾고 거기로 이동 하게 하고 뭐 하고 어쨌든 A* 알고리즘을 사용 하는 것 같던데 nev mesh 마렵다. 

     

    자동이동부터 하려고 했는데 맵 생성 부터 해야 할 것 같다. 

     

    한 클래스가 데이터를 갖고 있게 하고, 맵이 생성 될 때 그 클래스에 데이터를 가져서 맵 생성, 블록 파괴 되면 데이터 변경.

    여기까지 먼저 해보자. 유닛이동은 잠시 미룬다. 

    계획

     

     

    //////

    정말 어렵고도 힘든 시간이었다. 

    처음에 배열로써 맵을 만들고 배열을 참조해서 배열을 싹 다 뒤져서 1인 값을 찾고 그 1의 값에 트랜스폼 받아와서 자동 이동 하게 하려고 했는데 머리가 지끈 거렸다. 

     

    그러자 튜터님이 구세주처럼 다가와서 매우 편리한 방법을 알려주셨다...

     

    유닛은 그냥 오른 쪽으로 이동 하고, 오른 쪽으로 이동 못 하면 왼 쪽으로 가고, 흙 닿으면 공격로직 수행하고 와 

    이 간단한 방법을 떠올리지 못해서 후우 그래도 늦지 않게 깨달음을 주셔서 이걸로 간다!

     

    배열 방법이 어렵지만 더 좋은 방법이라면 하겠지만, 맵이 길어지면 연산량이 많아져서 별로 좋지 않은 방법이다. 그래서 이 방법을 택하겠다.

     

    우선 캐릭터 자동이동은 매우 쉬워졌으므로 맵구성부터 새로 시작하자.

     

    맵은 내려갈수록 체력이 많아지고, 희귀환 광석도 나올 수 있고, 그리고 어디까지 팠는지도 저장이 되어야 한다.

     

    /////

    오늘의 목표 자동맵생성까지 하고 잔다.

     

    // 일단 오늘은 물러간다. 목표는 부수라고 있는 법.

     

    현재까지 한 내용 .

    정체 모를 오징어그림
    반복해서 생성 할 지형

     

    현재 코드 계획

    Block - 체력과 Sprite렌더러 갖고 있고, 데미지를 받는 함수, 체력과 이미지를 바꾸는 함수가 있음.

    BlockController - 현재 층수에 따라서 Blcok들의 체력과, 이미지를 초기화 함. 이 오브젝트가 사진에 있는 블록들을 다 갖고 있음. 

    FloorManager - 특정 지형이 파괴 되면 다음 BlockContorloller를 생성함. 이 때 매니저가 갖고 있는 층수를 매개변수로 넣어서 BlockController 함수를 호출 시킴. 여러가지를 층수에 따라서 초기화 시킴. 그리고 파괴가 되었던 층수는 저장이 되어서 게임이 다시 로드 되었을 때 뚫려야 함.

    현재 모습

     

    내일 목표: 프로토타입 완성.(터치시 캐릭터 생성, 캐릭터 자동이동 및 움직임, 지형 자동생성)

Designed by Tistory.