오랜만에 돌아온 오버워치 따라잡기! 학기 시작하니 블로그 쓰는게 점점 힘들어지고 있다..
(핑계 대지 말고 열심히 살자)
오늘은 드디어 미루고 미루던 기본공격! 바로 시작 ㄱㄱ
A. 트레이서 기본 공격 분석
트레이서 기본 공격은 히트스캔이다.
그리고 일정 반경 내에서 총알이 hit한다.
기본 공격 테스트 영상
위 영상을 보면 기본 공격시 UI의 원 내에서만 총알이 날라가는 것을 볼 수 있다.
UI 기준이므로 가까울 때는 총알이 한 곳에 모이게 되고, 멀면 흩어지게 된다.
그렇다면.. 이렇게 총알이 원뿔 형태로 나아가게 하면, 멀수록 더 넓은 원의 hit range를 갖지 않을까?
즉, 총알 하나의 hit ray가 저 원뿔 내로 랜덤하게 형성되어야 한다.
좀 더 정확히 분석 해보자..! (하 머리 아파)
옵치 훈련장을 보면, 0m, 5m, 10m의 거리를 표시해뒀다. 이걸 참고해서 대충 거리에 따라 range가 얼마나 커지거나 작아지는지 알아봤다.
[0m]
벽에 딱 붙은 경우이다.
거의 점 수준으로 총알이 몰린다.
[5m]
[10m]
굉장히 수작업으로 5m의 사진과 10m의 사진을 겹쳐보았다.
5m때의 훈련장 봇과 10m때의 훈련장 봇의 크기가 똑같도록 설정함.
그렇게 두 이미지의 크기를 고정한 채로 원의 크기 비교했다.
잘 보면 10m 때의 원의 지름이 5m 때의 원의 지름의 두배이다!
완전 다행 ㅠㅠㅠ 다행히 거리가 2배 멀어지면 원의 지름이 2배 커진다! 완벽한 비례관계!
그렇다면 아까 위에서 제시한 원뿔 이론이 맞다는 것.
이제 유니티에서 이 이론을 싹 옮겨보자.
B. 이론 개발
결과부터! (생각보다 너무 오래걸렸다..)
정말 오래 걸린 이유는, Random.insideUnitSphere의 존재를 너무 늦게 알아버렸기 때문! 초보는 분발해야겠다..
먼저 ray의 origin은 카메라로 설정해줬다. 왜냐하면 카메라가 보는 곳에 총알의 쏴야하기 때문에 카메라의 transform이 필요했다.
원뿔의 꼭짓각을 coneAngle로 받아오고, coneHalfAngle을 구해서 원뿔의 높이가 1일 때의 coneRad를 구한다. coneRad는 원뿔의 바닥 원의 반지름이다.
그리고, 카메라가 바라보는 방향에 반지름이 coneRad인 Sphere가 있다고 가정했을 때, 해당 Sphere의 random한 점을 반환하게 하여 ray의 direction을 구했다.
정리하자면 이런 식일것이다!
원뿔의 높이를 1로 가정한 이유는 오른쪽 부분떄문이다.
hitOrigin.transform.forward는 unit vector기 때문에 길이가 1이다. 따라서 이걸 염두에 두고 coneRad를 구한 것이다.
C. 이론 개발 결과
위에서 개발한 것을 토대로, 좌클릭을 누르면 ray가 hit되는 곳에 red sphere가 나타나도록 설정을 했다.
결과를 보자!
영상에서 보이듯이, 가까우면 총알이 모이게되고, 멀면 퍼지는 것을 볼 수 있다.
거리에 비례하여 얼마나 퍼지게 할 지는 coneAngle을 어떻게 설정하냐에 따라 달라질 것이다.
<memo>
+ 트레이서 공격 영상 slowmotion으로 보면, 초반 정말 짧게 hit range가 좁다가 넓어짐..! 이건 위에 구현하고 고려하자
다음에는 탄창 개수와 장전의 개념을 도입해볼 것이다. 그럼 즐개! (즐개란 뜻)
'Unity > 오버워치 따라잡기' 카테고리의 다른 글
[Unity] 오버워치 따라잡기! 트레이서 편(6) - 기본 공격 장전 (0) | 2023.05.06 |
---|---|
[Unity] 플레이어 체력(HP바) 구현하기! (0) | 2023.03.20 |
[Unity] 오버워치 따라잡기! 트레이서 편(5) - Recall 시간역행 (0) | 2023.03.17 |
[Unity] 오버워치 따라잡기! 트레이서 편(4) - Recall 시간역행 (0) | 2023.03.17 |
[Unity] 오버워치 따라잡기! 트레이서 편(3) - Blink 점멸 (0) | 2023.03.16 |