Unity

벡터(Vector)

gcreators 2024. 9. 10. 19:12

유니티는 게임의 모든 요소를 Game Object(게임 오브젝트)라는 것으로 표현한다.

캐릭터, 적, 아이템, 장애물, 배경 등 플레이어와 상호작용을 하는 것이든 아니든 모두 오브젝트로 구현한다.

 

게임 오브젝트에는 

이런 Transform이라는 컴포넌트가 포함되어 있는데

Transform에는 Position(위치), Rotation(회전), Scale(크기)에 관한 Vector(벡터)형식의 값을 저장하고 있다.

 

벡터란 우리가 고등학교 수학 시간때 배웠던 그 벡터가 맞다(문과 : ㅔ..??)

벡터는 Magnitude(크기)와 Direction(방향)을 표현하는 값이다.

백터는 원점(0,0)에서 해당 위치 값인 좌표 값까지의 선을 연결해서 그 크기와 방향을 표현 할 수 있다.

원점(0,0)을 기준으로 놓여진 벡터 A와 B가 가진 X좌표와 Y좌표를 각각 더하면 벡터 C를 만들 수 있다.

크기와 방향이 모두 같은 두 벡터는 벡터의 시작점과 끝점의 위치에 상관 없이 동일한 벡터(상등 벡터)이다.

(C와 D는 동일한 벡터이다.)

 

벡터의 개념에 대해 알아둬야 하는 이유로는 이를 통해 여러가지를 할 수 있기 때문인데

 

가령 내가 게임을 하다가 적과 마주치게 되었을때 적의 위치를 계산해야 하려면 이 벡터를 활용해야 하기 때문이다.

A가 내 캐릭터가 있는 벡터이고 B가 적이 있는 벡터라고 치면

적이 있는 거리를 구하려면 

찾을 대상(적) - 찾는 대상(나) 이렇게 계산을 하면

B - A = C , (6-3 = 3, 2-4 = -2)

내 캐릭터(A)에서 적(B)을 바라보는 벡터가 (C = 3,-2)인 것이다

이제 내 캐릭터와 적 사이의 거리(길이)를 구하려면 피타고라스 공식을 이용해

 

√(3)² + (-2)² = √(9 + 4) = √13 = 3.605551..........5 약 3.61 의 길이(Length)가 있는 것을 확인 할 수 있다.

 

그리고 이 길이는 곧 벡터의 크기다

 

원점에서 벡터가 나타내는 좌표까지는 선분으로 표현이 되고 있고

X축의 좌표는 밑변, Y축의 좌표는 높이를 가지는 직각 삼각형으로 볼 수 있다.

 

피타고라스 정리를 통해 직각 삼각형의 두 변의 제곱의 합은 빗변의 길이의 제곱과 같다는 것을 알 수 있고

빗변의 길이가 바로 벡터의 크기이자 길이이며 또 이를 스칼라(Scalar)라고 말한

스칼라는 벡터의 '크기'만을 뜻하며 사칙연산이 가능하다

(방향은 포함되지 않음을 기억해야한다.)

 

그리고 우리는 벡터를 좌표 평면 위에 표시하여 시각화 하였기에

해당 벡터의 방향을 쉽게 알 수는 있지만

벡터의 방향을 수학적으로 계산하려면 어떻게 해야할까?

이 벡터를 순수하게 방향만 나타내는 방향 벡터로 만드는 과정에서

벡터의 크기, Scalar는 중요하지는 않다. 

따라서 계산의 용이성을 위해 벡터의 길이를 1로 만들어주는 과정을 거치는 것이 중요한데 이를 단위 벡터(Unit Vector)라고 한다.

그리고 이렇게 단위 벡터로 변경하는 것을 벡터의 정규화(NorMalization)이라고 한다.

 

벡터의 각 성분(x,y 좌표)을 Scalar로 나누면 해당 벡터의 단위 벡터를 구할 수 있다.

 

우선 위 벡터의 Scalar는 

√((5)² + (3)²) = √(25+9) = √34 가 되므로 약 5.831이 된다

 

이제 각 성분(x,y 좌표)를 Scalar로 나누면

5 ÷ √34, 3 ÷ √34 = 약 0.8575, 0.5145 가 단위 벡터가 된다.

 

단위 벡터의 크기를 계산해서 그 결과가 1이면 해당 단위 벡터는 정상적으로 만들어진 단위 벡터임을 확인 할 수 있는데

이 계산식을 거쳐 단위 벡터도 1임을 검증 할 수 있었다.

 

내적과 외적은 추후 업데이트

 

'Unity' 카테고리의 다른 글

Transform(2) - position  (0) 2024.09.20
Transform(1) - 좌표  (0) 2024.09.20
충돌 처리(1) - AABB  (0) 2024.09.19
Inspector  (0) 2024.09.12
MonoBehaviour  (0) 2024.09.12