[Unity] 벡터의 내적과 외적

Lumos Velog·2025년 8월 11일
0

개요

게임 개발에서 벡터 연산은 물리 계산, 방향 판정, 카메라 제어 등 다양한 영역에서 활용된다. 그중에서도 내적(Dot Product)외적(Cross Product)은 방향과 각도, 평면상의 수직 벡터 계산 등에 필수적인 연산이다. Unity는 Vector3.Dot과 Vector3.Cross 메서드를 통해 이를 간단히 계산할 수 있도록 지원한다.





내적(Dot Product)

정의
두 벡터 A와 B의 내적은 다음과 같이 정의된다.

A⋅B=∣A∣∣B∣cosθ

  • ∣A∣, ∣B∣ : 각 벡터의 크기(Magnitude)
  • θ : 두 벡터가 이루는 각도

특징

  • 결과값은 스칼라(Scalar)이다.
  • 두 벡터의 방향이 완전히 같으면 cos𝜃=1 이므로 내적은 벡터 크기의 곱이 된다.
  • 두 벡터가 서로 수직이면 cosθ=0 이므로 내적은 0이 된다.
  • 두 벡터가 반대 방향이면 cosθ=−1 이므로 음수가 된다.

Unity에서의 사용

Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0.5f, 0.5f, 0);
float dot = Vector3.Dot(a, b); // 0.5

활용 예시
시야 판정
캐릭터 전방 벡터와 목표물 방향 벡터의 내적을 통해, 목표물이 시야각 내에 있는지 판정할 수 있다.

Vector3 forward = transform.forward.normalized;
Vector3 toTarget = (target.position - transform.position).normalized;
float dot = Vector3.Dot(forward, toTarget);

if (dot > Mathf.Cos(45f * Mathf.Deg2Rad))
{
    // 시야 45도 안에 목표물이 존재
}

정면/후면 판별
내적의 부호(양수/음수)를 사용하여 상대가 앞쪽에 있는지 뒤쪽에 있는지 구분 가능하다.





외적(Cross Product)

정의
두 벡터 A와 B의 외적은 다음과 같이 정의된다.

A×B=∣A∣∣B∣sinθ⋅n

  • ∣A∣, ∣B∣ : 각 벡터의 크기
  • θ : 두 벡터가 이루는 각도
  • n : 두 벡터가 이루는 평면에 수직인 단위 벡터(Normal Vector)

특징

  • 결과값은 벡터(Vector)이다.
  • 방향은 오른손 법칙을 따른다.
  • 오른손의 엄지 방향이 외적 결과 벡터 방향.
  • 크기는 두 벡터로 이루어진 평행사변형의 넓이와 같다.
  • 두 벡터가 평행하면 외적의 크기는 0이 된다.

Unity에서의 사용

Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 cross = Vector3.Cross(a, b); // (0, 0, 1)

활용 예시
법선 벡터 계산
3D 모델의 표면 법선을 구해 조명 계산이나 충돌 판정에 활용한다.

Vector3 v1 = p2 - p1;
Vector3 v2 = p3 - p1;
Vector3 normal = Vector3.Cross(v1, v2).normalized;

좌우 방향 판정
캐릭터 전방 벡터와 목표물 방향 벡터의 외적을 이용하여 목표물이 왼쪽에 있는지 오른쪽에 있는지 판별할 수 있다.

Vector3 forward = transform.forward;
Vector3 toTarget = target.position - transform.position;
float dir = Vector3.Cross(forward, toTarget).y;

if (dir > 0) { /* 왼쪽 */ }
else { /* 오른쪽 */ }

내적과 외적 비교

구분내적 (Dot Product)외적 (Cross Product)
결과 타입스칼라벡터
주요 용도각도 계산, 방향 비교법선 계산, 수직 벡터 구하기
평행 여부 판정1(같은 방향), -1(반대), 0(수직)크기 0이면 평행
기하학적 의미크기 곱 × 방향 유사도평행사변형의 넓이와 방향




결론

내적과 외적은 단순한 수학 연산을 넘어, 게임 로직의 핵심적인 도구로 활용된다. 시야 판정, 조명 계산, 이동 방향 판정 등 다양한 분야에서 필수적으로 사용되며, Unity에서 제공하는 Vector3.Dot과 Vector3.Cross를 통해 간결하고 효율적으로 구현할 수 있다. 이를 정확히 이해하고 적재적소에 활용하는 것이 효율적인 게임 개발의 기반이 된다.

0개의 댓글