- 관련게시물 : 댕댕이 서바이벌 #9 - Experience Point
- 관련게시물 : 댕댕이 서바이벌 #8 - 성능 최적화 (움짤 주의)
- 관련게시물 : 댕댕이 서바이벌 #7 - 플레이어 스텟
- 관련게시물 : 댕댕이 서바이벌 #6 - 즉사 공격, 가까운 적 탐색, 데미지 표기
- 관련게시물 : 댕댕이 서바이벌 #5 - 몬스터 스폰
- 관련게시물 : 댕댕이 서바이벌 #3 - 무기 종류 추가 및 업그레이드 구현
- 관련게시물 : 댕댕이 서바이벌 #2 - 무기 기틀 세우기
- 관련게시물 : 댕댕이 서바이벌 #1 - 플레이어 기본 조작
체력과 UI 작업을 하기로 했었으나 UI 배치 구상이 잘 되지 않는다.
따라서 그동안 미루어왔던 작업과 무기를 한 종류 추가해주기로 했다.
일단 오늘의 결과물부터 보고 가도록 하자.
바로 미티어!

하늘에서 쏟아지는 운석의 웅장함에 모두 쓰러져가는 모습이다.
지난 개발일지에서 경험치를 구현했었고, 윗 짤에도 보이니 짤은 생략.
플레이어 경험치통과 체력 등의 UI를 만들어주어야하는데 조금 구상이 잘 안된다.
따라서 미루어왔던 작업 몇가지를 진행해주었다.
적 리팩토링
미래의 나에게 선물이다.
코드가 깔끔해져서 기분이 좋다.
다음으로 물리 관련 변경사항이다.
넉백
기존에는 단순하게 두트윈을 이용해 타이머 변수를 0에서 0.3초로 이동시키며,
넉백량/무게 * 타이머 * 방향으로 넉백을 진행해주었다.
이 방식의 문제점은 공격을 맞으면 무조건 0.3초간 넉백을 받는다는 것.
넉백량이 약하더라도 0.3초간 그만큼의 넉백을 받아야하는 문제가 있다.
원하는 방식의 넉백이 아니기 때문에 수정해주기로 했다.
일단 유니티 물리를 이용해보기로 생각했다.
단순하게 넉백량/무게만큼 addforce해주는 방식으로.
결과는 역시나 마음에 들지 않았다.

공격을 받을수록 밀려나가는 속도가 빨라진다는 것.
물론 현실에서는 이것이 사실이지만 원하는 방식은 아니다.
따라서 다른 방법을 모색해보았다.
바로 물리지식을 이용하는 것.
물리 강의 시간에 매번 잠을 잤기 때문에 C+의 학1점을 보유하고 있으나,
간단한 개념이므로 C+인 나조차도 구현에 성공했다.

방법은 간단하게도 F = ma를 이용하는 것이다.
이를 위해 rb.velocity값을 방향 벡터 변수와 현재 속도 변수로 조작해준다.
그리고 현재 속도는 Time.deltaTime * 가속도 만큼 매 프레임 더하고, 최대속도를 넘지 못하도록 해준다.
이제 충격량 보존 법칙을 이용해 우리가 주는 넉백량만큼을 보내주면 된다.
F = ma, p = mv를 이용해 현재 적의 운동량은 현재 속도 * 무게이므로
적의 운동량 - 넉백량 = 변화한 운동량이고 변화한 운동량/무게를 해주면 현재속도가 계산되게 된다.
이를 속도에 관한 식으로 이항시켜 정리해보면
변화된 속도 = 속도 - 넉백량/무게가 될 것이다.
와 똑똑해!
이대로 적용을해버리면 결국 여러번 맞게되면 addforce와 같은 결과가 나와버린다.
따라서 항상 최대 속도에서 넉백을 시켜 바뀐 속도를 계산해주도록 한다.
또, 넉백량이 약한 무기를 맞게되면 이전에 큰 넉백을 당했더라도 덮어씌워지므로
현재 속도가 변화될 속도보다 느리다면 적용시키지 않는다.

만족스러운 결과물이 완성되었다.
미티어 구현
메테오가 아니다. 미티어다.
조금 더 무언가 있어보이는 느낌이 나는 것 같기 때문이다.
이름인 미티어 스트라이크는 길기 때문에 아마 미티어 스웜이든 뭐든 바뀔 듯 싶다.
본론으로 돌아가서, 적절히 가지고 있는 자산을 조합했다.
메테오 하면 낙하 -> 충돌 -> 폭파 -> 화염장판이 떠오른다.
뱀서로 치면 성수지만, 뱀서를 플레이하며 성수를 보면 매번 화가 났다.
초반에는 괜찮지만 진1화시키고나면 플레이어를 향해 모이면서 알파값도 진해지고 이펙트도 모여서
캐릭터가 잘 보이지 않는 것이었다.
나는 그러한 부분은 최대한 방지하고 싶고,
다른 서바이벌류 짤 몇개를 보았을 때 메테오가 굉장히 거대하던데
이것 역시나 화면을 가리므로 좋아하지 않아 적당히 조절해줄 생각이다.
1단계인 낙하부터 시켜보았다.

성수가 떨어지면 그림자가 없던데, 참으로 어색해보인다고 느꼈다.
탑뷰 게임은 그림자가 생명이라고 생각한다.
그림자 + 랜덤 각도로 낙하를 시켜보았다.
나쁘지 않은 느낌이다.
다음으로 폭파를 시켜보자.

동시에 발생하므로 겸사겸사 화염장판도 작업했다.
마음에 드는 비쥬얼이다.
하지만 여러가지 문제가 있다.
낙하시킨 운석 본체를 제거하며 파티클도 사라지는 것, 화염 파티클또한 서서히가 아닌 즉시 사라지는 것.
그림자가 뜬금 나타나는 것.
수정해주었다.

그럭저럭 볼만한 수준이 된 것 같다.
비쥬얼적인 요소가 끝났으므로 다음은 실제 데미지를 주도록 하자.
먼저 폭파.
이전에 이미 적, 무기 메커니즘을 구현해두어 간단했다.
충돌 시점에 Physics.Overlap함수를 사용해 영역의 적을 찾아 데미지를 주면 끝.

넉백으로 바깥을 빠져나가 장판딜에서 손해를 보는 것이 아닐까 생각했는데,
더 생각해보니 어짜피 적 넉백은 항상 플레이어로부터 멀어지고, 적은 플레이어에게 다가오므로
결국 다시 장판에 들어와 큰 문제가 되지 않을 것이라 판단했다.
다음으로 장판 데미지를 구현했다.

마찬가지로 틱 주기를 두고 틱 주기마다 Overlap함수를 이용하여 데미지를 준다.
OnTriggerStay등을 이용해볼수도 있겠으나 이 함수는 각각의 적에게 사용하다보니
틱 주기를 설정하기도 불편해 이 방법이 효율적이라고 판단했다.
결국 처음에 나왔던 결과물이 완성되었다 !

이런 류는 단순히 스프라이트 애니메이션만으로는 느낌을 뽑기도 힘들것 같고
마법은 멋있어야하니 파티클을 이용해주었다.
점점 멋있어지는 것 같아 !
적 사망 시 넉백을 구현하라는 피드백은... 다음에 해야겠다...
근데 보다보니 딱히 문제없는것같기도해서 모르겠따 !
일단은 실 플레이 시에 체크해보고 결정하는 걸로...
다음은 진짜 UI 작업이나 체력 작업, 경험치 렙업 작업 중에서 해오도록 하겠다.

댓글 영역