카테고리 없음

5.14 TIL - 벡터

bugmin 2024. 5. 14. 23:35

오늘은 벡터부분을 아주 핵심적으로 요약하여 서술한다.

 

벡터는 화살표를 생각하면 좋고 방향과 크기(화살표 길이)를 가짐

 

시작점을 원점인 (0, 0)으로 고정하자는 약속을 하니 X, Y 좌표로 벡터를 나타낼 수 있게 됨

 

좌표로 나타낼 수 있게 되면서 벡터는 유니티서 위치를 나타내는데도 사용됨

 

벡터의 덧셈이나 뺄셈은 x는 x끼리 y는 y끼리 계산을 하면 된다.

 

뺄셈에서 중요하게 기억해야할 점은

 

B좌표에서 A좌표를 빼면 A에서 B로 향하는 벡터가 구해지고 이를 정규화를 거치면 크기가 1인 방향벡터를 구할 수 있게 된다.

 

이를 통해 뭐 몬스터가 플레이어를 따라갈 수 있게 할 수 있다.

 

곱하기의 경우에도 기억해야할 포인트가 있다.

 

곱하기를 하게되면 방향은 유지되고 크기만 바뀐다

 

이 곱하기 성질을 이용하면 벡터를 이동할 때 사용 시에 유용하다. 벡터에 속도를 곱함으로써 속도를 조절할 수가 있게 됨

 

마지막으로

벡터는 방향과 크기를 가지고 있는데

 

방향만 알고 싶을 땐 normalized(정규화)

크기만 알고 싶을 땐 magnitude를 사용한다 기억하면 좋다

 

방향구하기

 

방향구하는 것을 코드로 한 번 나타내보자

 

나로부터 가장 가까운 목표를 향하는 방향을 구하는 코드이다.

 

위에서 설명했듯이 A벡터에서 B벡터로 향하는 벡터는 B - A 로 구하고

이것을 정규화를 하면 방향을 알 수 있게 된다. 그것을 이용한 함수이다.

 

Distance

 

distance도 magnitude와 비슷한 개념이긴 하지만 계산 방법에 있어 차이가 있다.

 

magnitude는 하나의 벡터에 대한 크기를 구하는 반면 distance는 거리라는 이름에 걸맞게 두 좌표(벡터)를 잇는 벡터의 크기를 구하는 것이다.

 

여기서 눈치채야하는 것이 두 좌표(벡터)를 잇는 다는 것은 아까 말한 뺄셈과도 일맥상통하는 얘기이다.

 

A벡터서 B벡터를 향하는(잇는) 벡터는 B - A 이다.

 

즉 B - A 벡터의 크기(magnitude)를 구하면 그것이 distance가 된다.

 

나로부터 가장 가까운 목표(타겟)까지의 거리를 구해보는 코드를 작성하면

 

두 함수의 결과값은 같다. 

 

하지만 가독성면에서 Distance 함수를 쓰는 것이 좀 더 이해도 빠르고 좋기 때문에 Distance 함수를 쓰자

 

사실 transform.position - ClosestTarget.position을 해도 거리는 같기는 하다. A에서 B를 향하는 거리나 B에서 A를 향하는 거리는 같기 때문... 벡터 간의 거리 계산은 방향과는 무관하다는 점도 알아두면 좋다.