-
[Unreal 게시판] 총알이 날아온 방향 구하는 방법2015.01.22 PM 01:33
Question>
질문1:
(unreal engine 4의) FPS 슈터 예제를 보면
플레이어가 총에 맞으면 HUD로 총알 날라온 방향을 표시해주는데요
BP로 구현하려고합니다~ 그 기능을 C++코드를 찾아봤는데 잘 이해가 안가네요
8가지 방향 HUD는 메테리얼로 만들어놨는데요
이제 총알이 날라온 방향을 구해서 상,하,좌,우,상좌,상우,하좌,하우 8가지 방향 값만 알면 HUD로 표시하면 되는데
총알을 맞은 방향을 구하는것을 모르겠네요 ㅜ_ㅜ
Point damage 이벤트를 보면 shot from direction이 있는데 이걸 이용하면 될듯한데 이값에 뭘넣어야할지;;
혹시 방법아시는분 있으시면 힌트조금만 주시면 감사하겠습니다.
질문2:
답변 감사합니다 어느정도 해결이 되가는것같네요.. 근데 닷연산에서 좌우를 알수있는 방법이 없을까요?
+,-로 연산이 안되고 왼쪽 45도나 오른쪽 45도나 같은 45도로 나오네요 ㅜ
-------------------------------------------------------------
Answer>
답변1:
우선 link를 먼저 봐 주시고요.^^
http://ko.wikipedia.org/wiki/%EC%8A%A4%EC%B9%BC%EB%9D%BC%EA%B3%B1
http://dirac.daegu.ac.kr/bjmin/MathematicalPhysics/Vectors/scalarProduct.html
link 내용과 질문 내용에 따라서,
player 정면 방향의 '방향 vector'를 a라고 가정하고,
player의 중심에서 총알이 날아온 곳을 향하는 방향의 '방향 vector'를 b라고 가정하고,
a와 b의 사이 각에 대한 radian 값을 delta라고 했을 때,
아래와 같이 쓸 수 있고, f1과 f2는 같은 값을 갖습니다.
FVector a, b;
float delta, f1, f2;
f1 = FVector::DotProduct( a, b );
f2 = a.GetAbs() * b.GetAbs() * FMath::Cos( delta );
a, b는 normal vector이므로, a.GetAbs()와 b.GetAbs()는 1.0f이라서
아래와 같이 쓸 수 있고, f1과 f2는 같은 값을 갖습니다.
f1 = FVector::DotProduct( a, b );
f2 = FMath::Cos( delta );
그러므로, delta를 구하는 방법은 아래와 같다고 할 수 있습니다.
delta = FMath::ACos( FVector::DotProduct( a, b ) );
이제, a, b를 대입하기만 하면, player 정면을 기준으로 맞은 곳에 대한
각도 delta를 위 공식에 의해서 구할 수 있습니다.^^
( delta는 radian입니다. degree가 아닙니다.^^;;;; )
위 공식을 blue print로 구현하셔서,
delta에 따라서 총알에 맞은 방향을 판별하시면 됩니다.^^
답변2:
player 정면 vector로 계산한 값과
player 오른쪽 vector로 계산한 값을 같이 참고하시면 됩니다.
말씀하신대로,
player 정면 vector를 기준으로 dot product를 계산하면,
왼쪽 45도와 오른쪽 45도가 같은 값이 나와서 좌우를 판별할 수 없습니다.^^;;;;;
하지만, player 오른쪽 vector를 기준으로 dot product를 계산하면,
왼쪽 45도는 음수값이 나오고, 오른쪽 45도는 양수값이 나와서 쉽게 판별할 수 있습니다.^^
따라서,
player 정면 vector로 계산한 값과 player 오른쪽 vector로 계산한 값을 같이 참고해서 판별하시면,
왼쪽 45도와 오른쪽 45도의 경우에도 좌우 판별을 할 수 있습니다~ ^^
Tag:
안기훈, Kee Hoon Ahn, 언리얼, Unreal, UDK, iPhone, iPad, app, 앱, iOS
댓글 : 0 개
user error : Error. B.