오늘은 링 ID 28(추적), 29(즉사), 32(동면)번을 구현했다. 위 짤에서 앞에서부터 순서대로 각각 28, 29, 32번 링이다. 마지막 분홍색은 28번 링의 효과를 보여주기 위해 넣은 18(결계)번 링이다.
1) 28번은 가장 적이 뭉쳐있는 곳을 공격하여 범위 내에 있는 모든 적에게 피해를 입힌다. 그리고 타겟 스탯이 증가해도 실제로 공격하는 수가 증가하는 것이 아니라 최종 피해량이 50%씩 증가한다. 구현에서 가장 복잡했던 부분은 가장 적이 모여있는 곳을 찾는 것이었다. 이는 모든 몬스터-몬스터 간 Vector2.Distance()로 구한 거리가 추적 링의 타격 시 반경인 chaseRadius값보다 작은 것들이 가장 많은 몬스터를 선정하여 해당 적에게 Bullet을 발사하도록 했다. 그후 공격하는 것은 전에 폭발링을 구현했을 때와 동일하게 주변 몬스터를 찾아서 공격했다.
2) 29번 링은 공격 시 일정 확률로 적을 즉사시킨다. 따라서 단순하게 랜덤한 1이하 실수를 뽑아서 즉사 확률보다 낮으면 적의 HP를 0으로 만들도록 했다. 단, 보스 몬스터인 경우 즉사가 아니라 최대 HP의 (즉사확률/2)%만큼 피해를 입히도록 했다...로 생각하고 아차싶어서 다시 코드를 보니 현재 HP를 기준으로 했네..? 흠흠, curHP라고 적혀있는 부분을 baseHP로 빨리 수정하자.
3) 32번 링은 전투에 32번 링이 3개 존재해야만 공격한다(공격방식은 스탯이 굉장히 우월할 뿐 0번 링과 동일하다). 그리고 전투에서 단 3번만 생성할 수 있다(즉, 3개 생성했다가 하나라도 제거되면 32번 링 자체는 무용지물이 된다). 따라서 공격 구현은 비교적 쉽지만 생성 구현이 복잡한 경우였다. 먼저 DeckManager에 필드에 존재하는 32번 링의 개수를 의미하는 sleepActivated와 지금까지 생성된 32번 링의 개수를 의미하는 sleepGenerated 변수를 두었다. 두 변수는 32번 링이 생성 될 때마다 1씩 증가한다. 다만 생성 후 sleepGenerated가 3이라면 이전에 27(천사)링을 구현했을 때와 마찬가지로 하단의 RP 비용 텍스트를 "MAX"로 바꿔서 버튼 가림막을 활성화했다. 이후 링이 공격을 시도할 때, sllepGenerated == 3인 경우에만 Bullet을 발사하도록 했으며, 링이 제거되는 경우에는 sleepGenerated를 1 감소시켜서 더이상 링들이 공격하지 못하게 했다. 짤에서도 초록색 링이 정확히 3개인 경우에만 공격하는 것을 볼 수 있다.
내일은 대망의 "모든 링을 구현하는 날"이다. 30, 31번 링과 함께 남은 17번 링을 구현하면 된다. 그리고 17번 링을 구현한다는 것은? 몬스터가 골드와 에메랄드를 드랍한다는 것! 내일은 인스펙터 창에서 플레이어의 골드와 에메랄드가 증가하는 것만 확인하면 된다. 그리고 그 다음부터는 이제 다시 UI를 좀 만져야할 것 같다. 늘 생각하지만 이게 제일 귀찮은데 해놓으면 제일 있어보이는 작업인 듯 하다. 아자아자.
- 링 ID 17, 30, 31번 구현
'게임 개발 > Tower of Rings' 카테고리의 다른 글
7/13 - 랜덤 층 생성 알고리즘 (0) | 2022.07.13 |
---|---|
7/12 - 링 ID 17, 30, 31번, 몬스터 웨이브, 전투 보상, 게임 오버 (0) | 2022.07.13 |
7/7 - 링 ID 25~27번 (0) | 2022.07.08 |
7/3 - 링 ID 22~24번 (0) | 2022.07.04 |
6/30 - 링 ID 16번 // 7/1 - 공격 파티클 개편, 링 ID 20, 21번 (0) | 2022.07.02 |