어느 날  기획자가 공격자가 피격자 뒤에서 공격 하면 데미지를 더 준다 던지

명중률이 더 올라간다던지  피격자가 등 뒤에서 맞았는지 앞에서 맞았는지 요구 한다.

 

1 ) 피격자의 시야각을 설정한다.

2 ) 피격자와 공격자의 위치를 안다.

3 ) 피격자의 방향벡터를 안다.

이 세 가지만 알면 해결 할 수 있다.

 

 

모 피격자의 시야각은 xml로 뺀다든지 해서 기획자가 고칠 수 있게 해주자.

 

피격자 시야 각 120도

 

O : 피격자

A,B,C : 공격자

 

우선 O와 A,B,C의 위치를 알기 때문에

피격자와 공격자의 위치를 빼주면 피격자와 공격자 사이의 위치 벡터가 생긴다.

피격자의 방향벡터도 안다.

 

A - O = T1

B - O = T2

C - O = T3

 

피격자 방향 벡터 = T4

 

자 이제 피격자가 공격받은 방향을 판단 할 수 있는 기본 정보가 다  모였다.

 

내적의 성질을 이용하면 된다.

 

시야각이 120이 되어있는데 딱 절반으로 나두면 된다. 그럼 60도 가 나온다.

절반으로 나눈 이유는

내적했을 때 0-90도 360-270도, 90-180도 270-180도 대칭 값이다.

무슨 말이 냐면 45도나 315도를 내적하면 0.7071....이라는 같은 값이 나온다.

그러면 그냥 315도를 45도라 생각하면 된다. 이 성질을 이용하면

120도가 다 필요없다 딱 나눠서 60을 이용하면 된다.

 

결론

cos(60) = 0.5

if( 0.5 > 피격자 방향벡터 · 피격자와 공격자의 방향벡터 )

앞에서 맞았음

else

뒤어서 맞았음

 

이렇게 된다.

 

0.5 > T1 · T4 =  거짓 (뒤)

0.5 > T2 · T4 =  참 (앞)

0.5 > T3 · T4 =  참 (앞)

Posted by 부우산사나이
: