프로그래밍 2019. 10. 18. 16:42
728x90

oldTail 을 개발할때, 던지는 무기들이 몇가지 있었는데,

이때는 오른손을 샷의 출발점으로 하고,

cam dir (카메라 방향) 으로 투사체를 날렸다

 

화면 중심에 aim ui를 만들어두고,

aim ui 에 정확하게 투사체가 날아가는지를 체크해보면,

대충 엇비슷하게 날아가는 것을 확인할수 있었다. ( 화면 중심에 딱 정확하지는 않았다 )

 

이때는, 근접공격이 많았고,

딱히 이 부분에 대해 심도있게 생각해볼 필요성을 느끼지 못했었다.

 

지금 나공간 infinite 을 개발하면서,

근접공격은 없고, 무조건 투사체를 날리는 공격만이 있으니,

정확하게 중심으로 쏘아야하는 필요성을 느끼기도 하고,

 

사실은,

오버워치를 즐기면서 자극이 되었달까?

 

오버워치는 딱 중심에 맞게 구현해 두었는데, 나는 왜 엇비슷하게만?

'나도 딱 중심에 맞출꺼야!' 라는 의지가 생겼달까?

(오버워치가 참 도움이 되는군! ㅎㅎ)

 

뭐, 사실

fps 슛팅게임에서는 기본적인 부분이기도 하다

 

내가 쏜 것은 정확하게 한치의 오차도없이

화면의 중심으로 날아가야만 한다

 

자, 1장에서 이야기했듯이

화면 중심에서, 화면방향으로 투사체를 날리면 신경쓸 필요가 없다

무조건 정확하다

 

프로그래밍적으로는 카메라 위치( cam pos )에서 카메라 방향 ( cam dir ) 으로 날리면 된다

우리는 항상 카메라값을 가지고 있기 때문에, 구현에 어렵지 않다

 

그런데, 게임 안에서는 이렇게 사용하지 않는다

왜냐하면, 시야에 좋지 않기 때문인데,

 

화면의 중심에서 쏘아져 나가면, 

화면의 중심을 그대로 가리게 된다, 

내가 쏘고자 하는 타겟을 계속적으로 가리게되기 때문에 이렇게 쓸수없다

 

따라서 대부분의 fps 게임은 

여러가지 요소를 고려하여, 화면의 오른쪽 밑에 총을 둔다

 

테스트 해본 결과로는

화면의 위쪽에서 발사하면 좀더 역동적인 느낌을

아래쪽에서 발사하면 좀더 안정적인 느낌을 준다는것

물론 오른쪽 또는 왼쪽으로 슛발사위치를 옮겨서, 화면의 중심은 가리지 않는 상태가 좋다

 

 

결국은 요런 뷰가 되겠다

 

그러면은,

cam eye ---> cam dir 가 아닌,

 

위의 뷰는

cam eye + 오른쪽밑 보정값 ---> 방향 (어떤 방향으로?)

가 되겠는데

 

어떻게해야 할까?

 

슛의 발사위치가 보정된만큼 방향의 각도를 틀어주면 되지 않을까?

cam dir 을 틀어준다면?

 

테스트해본바로는,

화면의 중심으로 향하게는 할수 있지만,

투사체는 결국 중심을 벗어난다

 

방향벡터를 특정값으로 보정해서 방향을 틀어주는 것으로는

해결을 할수없다는것을 깨달았다

1장에서 설명했듯이, 슛의 발사위치 ---> 방향을 생각해보면 알수있다

 

그러면은, 히트스캔 방식을 이용하면 어떨까?

(총알의 경우, 이동속도가 워낙 빠르기 때문에, 투사체의 개념이 아닌

쏘면, 바로 월드에서의 충돌을 감지하는 히트스캔 방식으로 충돌을 처리한다)

 

총알발사이펙트는 총구위치에 붙여두고,

실제 충돌 체크는 cam eye ---> cam dir 

월드 충돌을 검사

 

충돌위치를 알아냈다면,

충돌위치에서 발사위치를 뺀값을

Normalize() 해주면 방향벡터를 구할수 있다

 

즉, 투사체가 날아갈 방향을 구할수 있으니, 

이렇게 투사체를 쏘면, 정확히 화면의 중심으로 날아가게 만들수 있지 않을까?

 

빠른 총알에서는 문제가 없으나,

이 방식을 투사체에 적용하기에는 무리가 있다

 

생각해보자

 

1. 투사체는 총알에 비해 매우 천천히 날아간다

 

2. 아주 먼 거리의 벽에 히트가 되었다고 하자

 

 

녹색선이 화면 중심선이다, 탑뷰로 표현해본것

 

투사체가 벽에 닿을때까지 긴 시간동안

투사체의 위치는

화면 중심에서 지속적으로 벗어나 있다

이것은 큰 문제다

 

3. 히트스캔을 해서,

가까운 거리에 있던 A캐릭터에 충돌된다는것을 검출하고 히트위치를 잡았다

히트위치로부터, 방향을 정했는데, 다음 틱에서 A캐릭터가 재빠르게 몸을 피했다

그래서, 저 멀리 뒤에있는 벽이 히트되었다

결국은, 게임 상황에 따라,

매틱마다 히트위치가 계속 바뀌게 될수있는데,

그때마다 투사체가 날아가는 방향을 계속 바꾸어주어야 할것이고,

이때 시각적으로 날아가는 투사체가 왔다갔다 튈수있다는것

 

4. 빈 하늘에 투사체를 쏘았을 경우는?

 

 

뭐, 이런

여러가지 문제점들이 있다

 

마지막장으로~

 

 

하트 콕콕~! ^^

728x90
posted by BK dddDang
: