-
스파르타 최종프로젝트 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에 데이터를 뒀다.
현재 소환 된 곡괭이의 수, 최대 소환 가능 수라는 변수를 만들어서 적용이 되게 했다.
소환을 하는 함수에 조건문을 추가 해서 제한수가 넘어가면 소환을 못 하게 했고, 소환을 했을 때 소환 한 수 증가, 공격이 사라졌을 때 소환 된 거 감소 하는 코드를 사용 해서 기능을 구현 했다.
그리고 스킬을 강화 하면 제한수가 증가를 해야 한다.
스킬 구조를 손 보긴 했지만 아직 맘에 많이 들지 않는다. 갈아 엎고 싶다. 그래도 일단 스킬을 하나 더 만들어서 스킬슬롯을 만들어주고 함수를 연결 해서 강화도 되게 만들었다.
그리고 옆에 있는 현재 소환 된 유닛의 수도 있는데 크게 다르지 않아서 따로 적어두진 않겠다.
4.현재 위치 표시 기능
몇 M를 내려갔나 표시 하는 기능을 만들었다.
항상 만들어야 겠다 생각 하다가 지금 만들었다.
표시 하는 곳을 어디에 둘지 고민이 많았는데 저기에 두기로 결정을 했다.
그리고 사용 하던 코드에서 Floor가 생성이 될 때마다 증가하던 변수가 있었다. 그것을 사용 해서 이 M가 점점 증가 되게 했다.
그런데 이 현재 m가 표시가 되어야 하는 게 있다.
이 UI인데 땅을 파게 됐을 경우에 증가가 되어야 하고, 나중에 스킬을 사용해서 공사땅이라는 것을 하게도 할 것이다. 이것을 하기 위해서는 기존에 사용 하던 맵이 생성 될 때마다 증가하던 변수를 사용 하기에는 애매하다고 느껴서 변수를 하나 더 만들고 ClearBlock이라는 클래스도 하나 만들어서 OnDisable을 활용해서 해당 블록이 파괴 되면 확장 했다라는 변수가 증가 하고 Txt도 변하게 해서 UI에 표시 하게 해봤다.
이렇게 해서 맵이 생성이 될 때마다 맵에 M자국은 바뀌고, 맵을 뚫을 때마다 UI표시도 바뀌게 했다. 나중에 땅공사 스킬을 사용 해도 비슷한 코드만 추가 하면 된다.
이렇게 해서 오늘 작업도 마무리인데, 기초적인 기능들이 거의 다 끝나가는 것 같다. 사실 훨씬 더 빨리 끝내야 하는데 너무 여유로웠던 거 같다. 이 댓가가 엄청 크게 오기 전에 빨리빨리 완성 하자. 확인을 해보니 시간이 벌써 10일밖에 남지 않았다. 맙소사다 시간이 이렇게 빠르다니.
이제 블록이 생성이 될 때 랜덤한 확률로 광석인 블록으로 생성이 되게 한 후에 파괴 되었을 시에 광석도 드랍을 하게 하는것을 만들어야 겠다. 이것까지만 하면 기초기능은 다 끝내는 것 같다.
좀만 더 속도를 내자. 지금 너무 느리다.
내일목표 : 블록 생성시 랜덤 광석 생성(광석은 체력 조금 더 많음), 블록 초기화 하는 부분을 좀 더 세밀하게 수정, 가방 시스템 제작, 갖고 있는 재화 표시 하는 UI추가 빨리빨리 완성 하고 아이템 기능도 만들고 영웅도 만들기
'게임 개발기록' 카테고리의 다른 글
스파르타 최종 프로젝트 21일차 (0) 2024.07.17 스파르타 최종프로젝트 20일차 (0) 2024.07.16 최종프로젝트 16일차 (0) 2024.07.12 스파르타 최종캠프 15일차 (0) 2024.07.11 스파르타 최종캠프 14일차 (2) 2024.07.10