
1. Vector

유니티에서 벡터(Vector)는 x, y, z라는 3개의 값(float)을 묶어둔 데이터의 묶음입니다.
벡터는 위치와 방향이라는 의미를 가질 수도 있습니다.
벡터를 이용하여 특정 방향을 바라보게 한다거나, 두 지점 사이의 거리를 알 수도 있는 게임 개발의 꽃입니다.
2. 거리 (Distance)

두 지점 사이의 거리를 구해야 되는 경우 ‘피타고라스의 정리(a^2 + b^2 = c^2)’를 사용하여 구할 수 있습니다.

이렇게 두 지점의 좌표를 알고 있으면 직각삼각형의 빗변의 길이를 구하는 식으로 두 점 사이의 거리를 알 수 있습니다.
그리고 이 연산은 유니티에서 제공하는 Distance 함수를 통해 쉽게 계산할 수 있습니다.
float distance = Vector3.Distance(A, B);3. 거리 비교 (sqrMagnitude)
유니티의 Distance 함수는 피타고라스의 정리를 이용하여 거리를 구하기 때문에 마지막에 ‘제곱근 연산’을 하여 최종적인 값을 구하게 됩니다.
하지만, 컴퓨터가 제곱근 연산을 처리하는 방식은 비효율적이고 반복적이기 때문에 비용이 많이 듭니다.
그렇기에 정확한 거리를 구하는 게 아닌 단순히 거리를 비교해야 되는 상황이라면 ‘sqrMagnitude‘를 사용하는 것이 성능면에서 유리합니다.
sqrMagnitude는 두 지점의 거리를 제곱근 연산을 하지 않고(D^2) 반환합니다.
float sqrDist = (enemyPos - playerPos).sqrMagnitude;
float sqrRange = 10f * 10f; // 판단하는 값도 제곱으로
if (sqrDist < sqrRange)
{
}4. 방향

A가 B를 바라보도록 한다는 건 ‘A에서 어떤 값을 더해야 B가 나올까요?’와 같은 의미입니다.
그렇기 때문에 방향을 구하는 식은 (목적지) – (출발지)가 됩니다.
위 예시에서는 (3, 2) – (-5, -1) 를 계산하면 (8, 3)이 나옵니다. 즉, A에서 B를 가기 위한 방향과 크기는 (8, 3)이라는 의미입니다.
Vector3 playerPos = transform.position;
Vector3 enemyPos = target.position;
Vector3 direction = enemyPos - playerPos;5. 정규화 (normalized)
방향을 구하는 식에는 온전히 ‘방향’의 값만 들어있는 것이 아닌 ‘거리’의 값도 들어있습니다.
정규화는 거리와 방향이 들어있는 값에서 방향만을 추출하는 과정입니다.
Vector3 playerPos = transform.position;
Vector3 enemyPos = target.position;
Vector3 direction = enemyPos - playerPos;
direction = direction.normalized;


