ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스파르타 최종프로젝트 23일차
    게임 개발기록 2024. 7. 19. 23:36

    벌써 23일차다. 말이 안 된다.. ㅜㅜ 시간 너무 빠르다. 3주 하고도 2일이 지난 시간. 과연 난 만족할만큼 작업을 했는가. 

    지금 생각하면 절대 아니라고 생각이 든다. 내 실력이 많이 부족하다고 하더라도 지금 이시간이면 난 모든 기능을 완성 했어야 한다고 생각이 든다. 아쉽긴 하지만 지금이라도 제발 속도를 올려보자. (일단 지금 글을 적는 건 저녁이므로 내일부터^^..)

     

     

    1.강화기능 저장하기

    어제 강화구조를 수정 하고 저장기능을 추가 해봤다. 그런데 파일을 찾지 못 해서 중단 하였었는데 그 문제는 이러했다. 

    Application.persistentDataPath;라는 거 자체를 string으로 저장을 시켜두고 사용을 하는 것인데 내가 이걸 초기화 하기 전에 Data를 불러왔기 때문에 비어있는 string을 사용 했어서 파일경로를 찾지 못 한 것이었다. 

     

    그래서 호출 순서를 변경 해줘서 파일을 제대로 찾아올 수 있었다. (튜터님 죄송합니당.. ^^)

    다시 실행 하여도 능력치가 유지 되는 모습

     

    하지만 Application.persistentDataPath; 기능이 담당튜터님께서 알려주시기에 빌드를 하지 못 할 것이라고 한다. 그래서 나중에 경로를 직접 지정을 해줘야 한다고 말씀 해주셨다. 그 때 다시 알려주겠다고 하셨다. 

     

    아무튼 저장이 제대로 되는 것을 확인 했고, 내가 생각하는 방식대로 잘 작동이 되는 것을 확인 했다. 

    이제 다른 기능들도 수정을 하고 저장을 추가 하면 될 것 같다. 

     

     

     

     

    2.스킬 구조 수정하기

    현재 스킬구조가 조금 문제가 많다. 여기저기 복잡하게 흩어져 있기도 하고, 스킬 하나 추가하려면 많이 줄이긴 했지만 그래도 많은 작업을 해야 했다. 스킬을 아예 싹 바꿔야 한다. 스킬은 만들어진 순간부터 계속해서 내 마음 한켠에 남아 있었는데 대가를 치를 시간이다.. 물론 지금 만들어진 것도 고민 많이 하고 만들어지긴 한거긴 한데, 저장기능을 추가 하기엔 부족한 부분이 엄청 많다. 

     

    그래서 거의 처음부터 다시 만든 것 같기는 하다. 

     

    구조 떠올리는 게 시간이 제일 오래 걸리는 것 같다. 

    강화를 어떤 방식으로 하는지도 정말 오래 걸렸는데 스킬구조도 쉽지가 않았다. 

     

    일단 csv로 관리를 하면 좋을 것 같긴 했는데 감이 안 오기도 해서 클래스로 만들었다. 

    그리고 SO를 사용할까 했지만, 굳이 싶었다. MonoBehaviour 기능을 사용하지 않고 Data만 남겨둘 것이기에 클래스만 만들어서 Data를 저장 시켜놓았다. 

     

    스킬들의 level, 설명, 효과 등등등 

     

    그리고 전부 다 swhich를 달아줘서 enum만 넣으면 알맞는 게 나오게 해서 사용을 하게 만들어 봤다. 

    모든 스킬들 갖고 있는 List에 함수를 달아줘서 Player에 new를 이용해서 객체 만들고 가져다가 쓴 거다.

     

    그래서 skill을 추가하려면 일단 skill 데이터 만들고, 스킬이 작동 되게 하는 함수를 만들어서 기존에 slot들이 사용하던 함수에 추가를 해주고, slot프리펩을 추가 해서 enum만 등록 하면 되게끔 수정해봤다. 

     

    그동안 다른 기능들을 먼저 해야겠다는 마음에 미뤄놨다가 대가를 치룬 것 같다. 아프다. 

    그래서 스킬들도 구조를 수정 하고 저장기능을 추가 했다. 

     

    스킬도 똑같이 Level만 저장하면 되게끔 해서 LevelList 라는 struct를 만들어서 저장하고 불러와서 덮어씌우게끔 했다. 

     

    지금 Save 자체를 클래스별로 호출 하는 게 아니라 DataManager가 다 하게끔 했다. 튜터니께서 이렇게 하라고 하셨는데 내가 잘 못 이해 한 것인가. 조금 불편한 부분이 있긴 했다. 

     

    일단 이렇게 하려면 변수들을 public으로 사용을 해야 원활하게 작동이 된다. level이나 gold같은 건 private로 두고 싶은데, 아쉬운 마음이 들긴 한다. 

     

    그런데 장점으로는 저장을 한 번에 해버리니까, 이곳저곳에서 저장을 안 해서 관리가 편한 것 같기도 있는 것 같다. 

    아무튼 그동안 대충 많들어놨던 스킬을 아예 새로 만드니까 힘들었지만 개운한 마음도 든다. 

     

    잘 수정이 된 것 같아서 흡족하고 만족 한다. 

     

    약간 

    공격력 100% 증가

    이동속도 100%증가, 공격속도 100%증가

     

    이런 식으로 스킬들의 효과설명이 각각 달랐는데 함수 하나로 어떻게 할까 했는데 그냥 string을 따로 만들어줘서 출력 하게 했으면 됐던 거였는데 너무 어렵게 생각 했던 것 같다. 

    이런 식으로 만들어봤다.

     

    아무튼 이렇게 해 Level만 저장 해서 잘 돌아가게끔 만들어 봤다. 

    이제 다른 기능들도 저장기능을 추가 해보자.

     

     

     

     

    3.맵 저장기능 추가하기

    플레이를 하면서 생성이 됐던 땅까지 생성이 되게 하고, 뚫었던 땅까지 뚫리게 해야 한다. 

    이 부분 같은 경우는 변수를 두 개 생성을 했다. 

     

    생성을 한 횟수, 층을 부순 횟수를 저장 하게 해서 이 두 가지를 저장을 한 후에 처리가 되게끔 했다. 

     

    이 기능을 추가 하면서 그동안 -1 +1 이런 식으로 조금씩 수정을 해서 적용이 되게끔 하던 것들이 있었는데 이런 것들도 싹 다 정리 해봤다. 

     

    그렇게 해서 뚫린 데까지 맵이 다시 생성 되게 했고 블록도 부숴지게 했는데 자잘한 문제들이 역시 있었다.

     

    먼저 나는 컬라이더 기반으로 게임이 진행 된다. 블록이 공격을 당해 파괴가 됐을 경우에 실행이 되거나 GameObject가 비활성화 됐을 때 호출이 되는 것들이 뭐 여러가지가 있었는데 싹 다 수정을 해줬다. 

     

    그리고 이거 외에도 여러가지 계산들을 넣어줘서 아무튼 잘 작동이 되게 해줬다. ㅋㅋ

    생각보다 수정을 해야 할 게 엄청 많아서 간단하지만 꽤 오래 걸렸다. 

     

    실행을 한 번 할 때마다 수정 할 게 계속 나왔다. 그래도 지금은 거의 수정 할 게 나오지 않을 것 같다라고 생각이 드는 정도까지는 완료를 해서 맵 저장기능을 추가 하였다. 

     

    그리고 맵에는 랜덤확률로 광석이 나오게 되는데 이 광석정보까지 저장을 할까 하다가 기획적인 부분이라서 조금 고민을 해보기로 했다. 

    == 튜터니께서 안 하는 게 낫다고 했다. 정말 굳이라고 한다. 내 생각도 그렇다.

     

     

     

    4. 자원 저장기능 추가하기

    갖고 있는 자원들을 저장 하고 불러오게 해야 한다.

    이런 건 정말 쉽다. 이 data를 갖고 있는 거 자체가 struct나 그냥 class라서 그 자체로 덮어 씌우게 하면 됐다. 

     

    그런데 나는 프로퍼티를 사용해서 이 데이터들을 관리 했었다. 

    이런 식으로

     

    그런데 이렇게 할 경우에 Save, Load 기능을 DataManager에서 하다보니 프로퍼티를 사용하기에 조금 번거로움이 있었다. 

     

    일단 프로퍼티는 직렬화가 안 되는 것인가 했는데 그것이 아니라 값을 초기화 안 해줘서 저장이 안 되는 부분이 있었다. 

    그래서 0으로 초기화를 해주는 걸 해줘야 한다. 

     

    그래서 일단 지금은 int gold = 0; 이런 식으로 필드에서 바로 초기화가 되게끔 해줬는데 이 부분도 나중에 수정을 좀 하고 싶다. 일단 private로 사용 하고 싶기도 하고, 필드에서 바로 초기화를 시키는 것은 내 개인적으로 조금 안 좋은 것 같다고 느껴지긴 한다. 

     

    그래서 저장이나 불러오는 것을 여기서 할까 했는데, 그러기엔 또 저장 불러오기를 여러 군데서 하니까 조금 번거로울 것 같기도 하고, 내가 못 떠올리는 것일 수도 있다. 매우 쉬운 방법이 있을 수도, 아무튼 바로 초기화를 해주는 것으로 바꿔주고 자원까지 저장기능을 추가 해줬다. 

     

    여기까지 하니까 하루가 다 갔다. 요즘 시간이 왜이리 빠른 건지 모르겠다. 

    지금까지의 프로젝트 상황. 지금 블록들이 딴딴한 오류가 있는데 저거 고쳤는데 또 저러네 왜 저러징. 저장이 안 됐나.

     

    아무튼 여기까지 해서 오늘 작업은 마무리를 했다. 오늘 점심쯤에 발제 비슷한 것을 했는데 벌써 시간이 최종발표 한 달을 남긴 시간이 되었다. 시간이 왜 이렇게 빠른 건가 싶기도 하고, 아무래도 좀 놀라웠다. 

     

    그동안에 시간이 아쉽기도 하고 많이 성장한 것 같다고 느껴지기도 하고, 캠프가 끝나면 이제 어떻게 해야 하나 싶기도 하다. 난 최선을 다했는가. 전혀 아니다 ...ㅋㅋ 

     

    일단 오늘 저장기능을 완성 하고 싶었는데 아직 못 한 게 하나 있기는 하다. 

    바로 유닛인데, 유닛슬롯 구조 자체도 바꿔줘야 한다. 

    머리가 어질어질 하다. 

     

    일단 저장이야 하면 되겠지만 유닛슬롯은 아예 방식을 바꾸고 싶어서 다시 만들어야 할 것 같다. 

    무슨 느낌이냐면, 다 생성이 되는 게 아니라 열려있는 유닛을 구매 하면 다음 유닛이 열리고, 검정색이였다가 이전 거 구매 하면 색깔이 열리고 구매 할 수 있고 이런 방식으로 바꾸려고 한다. 

     

    무슨 기능이든 복잡함을 추가 하려면 조금 많이 어려워 지는 것 같다. 

    아무튼 빨리 유닛까지 수정을 마치고 나서 방치형의 국밥 100연뽑을 만들고 싶다. 

     

    그리고 아이템 제작과 등등등 아직 못 한 게 진짜 엄청엄청 많다. 빨리빨리 만들자. 튜터님이 기다리다 지칠 것 같다. 

     

     

    내일목표 : 유닛구조 수정 후 저장기능 추가하기, 아이템 제작기능 완성 하기, 곡괭이 이미지 바뀌는 것도? 

    이번 주 목표 : 아이템 제작, 상점 영웅 구매 100연뽑 

     

     

     

Designed by Tistory.