ABOUT ME

-

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

    1.유닛 슬롯 수정

    유닛저장기능을 추가 하기에 앞서서 유닛슬롯의 구조를 변경 할 필요가 있었다. 

    현재 유닛을 구매 하는 상점시스템이 등록한 유닛들이 전부 다 나오는 구조였는데, 유닛을 구매하면 다음 유닛이 열리는 구조로 변경을 할 생각이였다. 

    대충 요런 느낌

     

    이것을 하기에 앞서 유닛의 Data를 받아오는 방식부터 조금 수정을 해야 할 것 같았다.

    지금은 Stat이라는 클래스가 있고 그걸 갖고 있는 Data클래스라는 게 있고 이 Data를 가지는 Controller가 있게 했는데 이러한 구조를 할 경우에 Data라는 오브젝트를 생성을 했어야 했다. 

     

    지금 다시 보니까 이렇게 할 필요가 없다고 생성이 되어서 Data라는 중간을 삭제 하고 바로 stat과 Controller가 잇게 했다. 

    그리고 나중에 저장을 하려면 연결이 되어 있어야 하는데 유닛슬롯들에 하나하나 뭐 다는 것보단 stat은 클래스니까 이걸 활용 하기로 했다. 

     

    stat은 csv로 받아오는 데이터인데 이걸 Controller에게 넘겨주고 데이터 변경시 stat을 변경 하게 하면 csv로 받아온 데이터리스트에 있는 것들이 같이 변경이 되니까 이 데이터리스트를 저장 시키면 됐었다. 

     

    처음에 다시 데이터를 작성 할 때 CSV로 받아오는 DataList를 Queue로 할까 생각 했었다. 

    아무래도 스텟을 한 번 받아오면 사용하지 않는 변수가 되어버린다고 생각 했으니 말이다. 

     

    그런데 저장을 어떻게 할까 고민을 하다가 CSV로 받아오는 DataList를 계속 이용을 하기로 했다. 

    처음엔 Controller를 만들 때 List에 추가를 해두고 나중에 이 갯수만큼 저장 시키려고 했는데 그럴 필요가 없을 것 같았다. 

     

    이렇게 데이터를 받아오는 것부터 수정을 해줬다. 이것도 고민을 많이 하고 만든 것인데 한 번 더 정리를 하니 코드가 훨씬 줄고 더 깔끔해졌다. 무엇보다 오브젝트를 생성 안 해도 된다. 

     

    이제 Controller 생성방식을 바꿔주면 될 것 같다. 기존엔 CSV로 받아온 List의 갯수만큼 전부 생성 되게 해줬었다. 

     

     

     

     

    2.유닛슬롯 생성방식 바꾸기

    현재 바꾸고자 하는 구조는 이렇다. 

    유닛을 구매하면 다음 유닛이 열리고, 그 다음 유닛을 구매하면 그 다음 유닛이 열린다. 

     

    조금 더 자세하게 말하면 첫 번째 유닛을 구매 할 시에 까만색으로 칠해져 구매를 누를 수 없던 2번 째 유닛을 구매 할 수 있게 되고, 3번 째 유닛이 나오게 된다. 

     

    유닛을 구매 할 시에 다음 유닛이 생성 되게 하는 거는 생각 할 필요도 없이 매우 쉬웠지만, 까만색으로 칠해진 것을 다시 색이 나오게 하고 구매버튼을 누를 수 있게 하는 게 조금 생각이 안 났다. 

     

    어떻게 해야 슬롯들이 작동 될까 했는데, 일단 연결이 되어야 한다고 생각을 했고 Queue를 이용한 방식을 떠올려봤다. 

    유닛컨트롤러를 생성 하면 Queue에 넣어놓았다가 다음 유닛 생성 할 때 이 큐를 빼면서 색이 돌아오게 하고 버튼 열리게 하는 것이다. 

     

    그런데 생각 해보니 Queue를 만들 필요 없이 그냥 Controller 변수 만들고 계속 초기화 해주면 되겠다 싶어서 큐는 굳이 안 만들었다. 

     

    생각이 엄청 안 났는데 정말 생각보다 엄청 쉬운 방법이 갑자기 떠올라서 당황스러웠다. 

    뭐든 시작에 어렵게 생각을 하면 오래 걸리는 것 같다. 그냥 쉽게쉽게 생각 하자. 

    유닛을 구매 하면 다음 슬롯이 구매 가능 해지고, 그 다음 유닛이 나온다.

     

    현재 Icon과 Animation을 Resoces 폴더로 갖고 오게 하려는데 조금 오류가 있어서 잠시 막아뒀다. 내일 튜터님께 물어봐야 할 것 같다. 

     

    아무튼 방식은 이렇다. 유닛을 생성 한다 -> 이 때 생성 된 유닛은 막혀 있다. -> 열려 있는 유닛을 구매 할 시에 닫혀 있던 유닛이 열리게 한다. 그리고 또 하나의 유닛을 생성 한다.

     

    이렇게 구현 해봤다. 

     

    이제 유닛 슬롯들의 구조도 싹 다 수정을 했으니 이제 저장기능을 추가 해보자. 

     

     

     

     

    3.유닛 저장기능 추가하기

    유닛을 저장 하기에 앞서 구조를 수정 하고 공격력 계산과 체력 등등을 플레이어 ATK처럼 바꿔서 레벨만 저장 하면 되게끔 수정을 해줬다. 

     

    그리고 이제 어떤 것을 저장 할지를 생각을 해봐야 했다. 

    내가 하고 싶은 건 3가지였다. 

     

    먼저 강화 단계, 이거는 레벨만 저장 하고 덮어씌우면 된다. 

    그 다음은 스폰 상태이다. 

    현재 유닛은 소환을 중단 할 수 있고, 다시 스폰 되게 할 수 있다. 

     

    이 기능을 저장 하고 싶었다. 만약 소환을 중단 시킨 유닛이면 소환이 안 되고, 소환을 시켜둔 유닛이면 소환이 되게끔 해주는 것이다. 

     

    그리고 유닛 밑을 보면 게이지가 있다. 그건 재생성 시간인데 꽉 차면 유닛을 생성한다. 이것도 저장을 하고 싶었다. 

    그럴려면 먼저 유닛을 소환 하는 코루틴부터 수정을 해줘야 했다. 

     

    현재 스폰을 중단 하게 되면 코루틴이 멈추는 게 아니라 변수 하나 값을 바꾸게 해서 안의 내용이 실행이 되지 않는 것이지 코루틴은 계속 해서 돌아가는 구조다. 

     

    이것은 매우 비효율적인 방법이라고 생각이 들어서 먼저 바꿔주게 했다. 

     

    Toggle 느낌으로 코루틴이 켰다 꺼졌다를 반복 하게 하고 싶었는데 어떻게 할까 생각을 해도 도저히 생각 안 나던게 오늘 또 갑자기 생각이 났다. 역시 꿀잠의 효과인가. 머리가 잘 돌아간다.

     

    코루틴을 변수로 만들고 null인지 체크를 하고  null이면 시작, null이 아니면 코루틴이 있는 거니까 stop 이런 식으로 Toggle로 만들어 보았다. 이 때 Stop을 하고 변수로 되어 있는 코루틴을 =null을 해줘야 한다. 다시 null이 되어야 null체크가 제대로 됐었다. 

     

    여기서 알맞는 위치에 bool 변수의 값이 바뀌게 한 다음에 Load 했을 때 다시 스폰이 실행 되게 할 생각이다. 

    토글처럼 재생성이 멈췄다가 실행 됐다 반복 함.

     

    코루틴까지 수정을 해줬고 이제 저장기능을 추가 해주면 된다. 

     

    그리고 저장을 해야 할 게 3가지가 아니라 4가지인데 구매한 유닛들의 수만큼 다시 생성을 해야 하는 것도 추가를 해줘야 한다. 

     

    그래서 유닛슬롯이 생성 될 때마다 증가하는 변수를 하나 만들어 주고 활용을 하였다. 

    유닛을 구매 하면 다음 슬롯이 구매 가능 하고 그 다음 유닛이 나오게 하고 하는 방식이라 조금 복잡 했다. 

     

    예외처리를 좀 해줘야 했다. 

    아무튼 조금 오래 걸렸는데 구매한 유닛까지 다시 활성화가 되고, 열려있는 슬롯까지 생성이 된 다음에 소환 중이던 유닛은 다시 그대로 소환이 되게 했다. 소환을 멈춘 유닛은 소환이 안 된다. 

     

    이렇게 해서 만들어져 있던 것들에게 저장기능을 추가 하는 것을 완성 했다.

    저장 자체를 추가 하는 것은 유니티 덕분에 굉장히 쉬웠지만, 저장을 문제 없고 용이하게 하려면 구조를 죄다 수정 해야 해서 스트레스도 받고 꽤나 오래 걸렸던 것 같다. 

     

    그래도 저장기능이 깔끔하게 마무리 된 것 같아서 만족 한다. 지금 만들어져 있는 것들은 튼튼하게 만들어진 것 같다. 

    이제 다시 기능들을 계속 추가만 하면 될 것 같다. 

     

    다음 기능은 아이템 제작이다.

     

     

Designed by Tistory.