ABOUT ME

-

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

    1.스킬구조개선하기

    현재 스킬코드가 여기저기 뒤섞여 있어서 한 번 정리를 해줘야 한다. 이것도 깊은 고민 후에 만들어야 내 머릿속에 정리가 잘 되고 관리하기 쉽겠지만, 조금 오래 걸릴 것 같다고 판단 하여서 마음에 들게끔은 만들어지진 않았다. 

     

    나중에 점점 수정이 될 것 같다. 

     

    그래서 이런 식으로 수정을 했다. 상점에서 스킬을 구매 할 경우에 패시브 스킬이면 바로 효과가 적용, 액티브 스킬이면 스킬 사용이 가능 해지게 만들었다.

    스킬 구매 하기 전
    구매 하면 버튼이 열린다.

     

    이거 같은 경우 검은 색 오브젝트를 하나 더 만들었는데, 처음에는 Color값만 바뀌게 하려다가 그럴려면 Color가 몇 인지 코드로 적어놓아야 해서 조금 더 별로인 것 같다고 느껴서 오브젝트 하나를 더 만들어서 가리게 만들었다. 구매시에 오브젝트가 비활성화 되어서 클릭을 할 수 있게 된다. 

     

    그리고 스킬을 사용하면 쿨타임이 돌아야 하고, 스킬을 사용하지 못 해야 한다. 

    그런데 쿨타임이 돌기 전에 지속시간이 먼저 표시가 되어야 하고, 그 다음에 쿨타임이 표시가 돼야 했다. 

     

    처음에 이 부분을 사용 하였을 때 코루틴을 2번 활용을 해서 했었다. 

     

    시간을 기다리게 하는 코루틴을 만들어서 지속시간과 쿨타임을 기다리게 했는데 스타트 코루틴이 가비지가 많이 쌓여서 코루틴 안에서 스타트코루틴을 사용 하는 것은 좋지 않다고 들어서 이 부분을 수정을 했다. 

     

    코루틴 하나를 만들어서 거기서 2개 다 기다리게 했는데, 스킬 사용시 스킬 정보가 담긴 Struct를 받아와서 지속시간과 쿨타임을 기다리게 했다. 

     

    담당튜터님은 보자마자 왜 분리를 안 하셨냐고 의아해 하셨다. 나도 만들면서 좀 그렇긴 했다. 

    그래서 스타트코루틴이 가비지가 많이 쌓여서 이렇게 해봤다고 했는데 전혀 상관이 없다고 말씀 해주셨다. 

    가비지가 쌓이긴 하는데 1~2개 아니 몇 개 한다고 해서 문제가 전혀 되지 않으니 분리를 하는 게 더 좋을 것 같다고 말씀을 해주셨다. 하지만 리팩토링은 나중에 하라고 하셨다. 일단 기능 구현 완성부터다. 

     

     

     

    2.땅 재생성 되게 만들기

    게임의 기본적인 기능 중에 하나이다. 파괴 됐던 땅 중에 몇 개들은 다시 재생성이 되어야 했다. 

    처음엔 전부 다 랜덤으로 블록들이 재생성이 되게 하려고 했다. 

    (한 층에 2개가 생성 된다고 하면 위치는 랜덤으로)

     

    그런데 그렇게 할 경우에 블록을 공격하다가 유닛이 가려진다거나 여러 문제들이 있을 것 같아서, 최소한의 랜덤성만 주고 블록들이 재생성 되게 해보았다. 

     

    땅이 생성 될 때 랜덤 값을 돌려서 0이면 빨간 색 위치에서 블록이 재생성이 되게, 1이면 파란색에서만 블록이 재생성 되게 하는 느낌으로 만들었다. 

     

    이 때 재생성 하는 함수는 Controller가 갖고 있고 호출을 Block들이 했어야 했다. RepairBlock 이라는 클래스를 만들어서 재생성 될 얘들한테 넣어주고 UnitController를 연결 해주려고 했는데 튜터님께서 UnityAction을 추천 해주셔서 그 방식대로 해보았다. 

     

    Block은 현재 Controller랑 연결이 되어 있어서 Block에서 GetComponenet로 RepairBlock을 가져와서 거기 Action에 함수 넣게끔 연결을 해줘서 재생성이 되게 했다. 

     

    OnDisable을 사용 해서 파괴 되면 몇 초뒤에 다시 스폰 하는 코루틴을 호출 시키게 했다. 

    그리고 모든 블럭들이 호출을 하면 안 되기에 처음 초기화를 할 때 랜덤 값을 돌려서 0이면 몇 개들만 남기고 Repair컴포넌트를 꺼버리는 형식으로 구현 했다. 

     

     

     

    3. 공격횟수 제한 넣기

    클릭을 하게 되면 곡괭이를 소환 해서 공격을 하게 된다. 이 공격을 하는 횟수를 제한을 만들어 줘야 한다. 

    그리고 스킬을 업그레이드 하게 되면 이 제한이 상승하게 되어서 더 많은 곡괭이를 소환 할 수 있게 된다. 

     

    항상 데이터를 어디에 둘지가 고민이 많이 되는 것 같다. 시간이 너무 오래 걸리는 것 같아서 일단 PlayerController에 데이터를 뒀다. 

     

    현재 소환 된 곡괭이의 수, 최대 소환 가능 수라는 변수를 만들어서 적용이 되게 했다. 

     

    소환을 하는 함수에 조건문을 추가 해서 제한수가 넘어가면 소환을 못 하게 했고, 소환을 했을 때 소환 한 수 증가, 공격이 사라졌을 때 소환 된 거 감소 하는 코드를 사용 해서 기능을 구현 했다. 

     

    그리고 스킬을 강화 하면 제한수가 증가를 해야 한다. 

    스킬 구조를 손 보긴 했지만 아직 맘에 많이 들지 않는다. 갈아 엎고 싶다. 그래도 일단 스킬을 하나 더 만들어서 스킬슬롯을 만들어주고 함수를 연결 해서 강화도 되게 만들었다. 

    2개 이상 소환을 못한다.
    강화 시에 최대소환 수가 증가 하는 모습

     

    그리고 옆에 있는 현재 소환 된 유닛의 수도 있는데 크게 다르지 않아서 따로 적어두진 않겠다.

     

     

     

     

    4.현재 위치 표시 기능

    몇 M를 내려갔나 표시 하는 기능을 만들었다. 

    항상 만들어야 겠다 생각 하다가 지금 만들었다. 

     

    표시 하는 곳을 어디에 둘지 고민이 많았는데 저기에 두기로 결정을 했다. 

     

    그리고 사용 하던 코드에서 Floor가 생성이 될 때마다 증가하던 변수가 있었다. 그것을 사용 해서 이 M가 점점 증가 되게 했다.

    그런데 이 현재 m가 표시가 되어야 하는 게 있다. 

     

    이 UI인데 땅을 파게 됐을 경우에 증가가 되어야 하고, 나중에 스킬을 사용해서 공사땅이라는 것을 하게도 할 것이다. 이것을 하기 위해서는 기존에 사용 하던 맵이 생성 될 때마다 증가하던 변수를 사용 하기에는 애매하다고 느껴서 변수를 하나 더 만들고 ClearBlock이라는 클래스도 하나 만들어서 OnDisable을 활용해서 해당 블록이 파괴 되면 확장 했다라는 변수가 증가 하고 Txt도 변하게 해서 UI에 표시 하게 해봤다. 

     

    주황색 테두리의 블록이 파괴 되면 확장한 땅의 UI 표시가 변경 된다.

     

    이렇게 해서 맵이 생성이 될 때마다 맵에 M자국은 바뀌고, 맵을 뚫을 때마다 UI표시도 바뀌게 했다. 나중에 땅공사 스킬을 사용 해도 비슷한 코드만 추가 하면 된다. 

     

     

     

    현재 프로젝트의 상황

     

    이렇게 해서 오늘 작업도 마무리인데, 기초적인 기능들이 거의 다 끝나가는 것 같다. 사실 훨씬 더 빨리 끝내야 하는데 너무 여유로웠던 거 같다. 이 댓가가 엄청 크게 오기 전에 빨리빨리 완성 하자. 확인을 해보니 시간이 벌써 10일밖에 남지 않았다. 맙소사다 시간이 이렇게 빠르다니.

     

    이제 블록이 생성이 될 때 랜덤한 확률로 광석인 블록으로 생성이 되게 한 후에 파괴 되었을 시에 광석도 드랍을 하게 하는것을 만들어야 겠다. 이것까지만 하면 기초기능은 다 끝내는 것 같다. 

    좀만 더 속도를 내자. 지금 너무 느리다. 

     

     

    내일목표 : 블록 생성시 랜덤 광석 생성(광석은 체력 조금 더 많음), 블록 초기화 하는 부분을 좀 더 세밀하게 수정, 가방 시스템 제작, 갖고 있는 재화 표시 하는 UI추가 빨리빨리 완성 하고 아이템 기능도 만들고 영웅도 만들기

     

     

Designed by Tistory.