게임에서 캐릭터(또는 카메라)가 어떤 방향을 보고 있을 때, 특정 대상이 내가 보는 방향의 앞쪽 시야(FOV, Field of View) 안에 들어오는지 판단해야 하는 경우가 많습니다.

예를 들면:
이때 가장 간단하고 빠르게 쓰는 방법이 벡터 내적(Dot product) 입니다.
예시로는 보통 이렇게 만듭니다:
정규화란 벡터의 길이를 1로 만드는 것입니다.
정규화한 뒤에는 다음이 성립합니다.
Dot(f, d) = cos(θ)
(θ는 f와 d 사이의 각도)
정규화된 상태에서 내적은 “얼마나 같은 방향인가”를 나타냅니다.
즉, Dot 값이 클수록 정면에 가깝다는 뜻입니다.
시야각 FOV는 보통 “좌우로 벌어진 전체 각도”입니다.
예를 들어 FOV가 60°라면, 정면을 기준으로:
즉, 경계선은 정면 기준 ±(FOV/2) 입니다.
따라서 대상이 시야 안에 있으려면:
수학으로 쓰면:
그런데 게임에서는 보통 각도 계산(acos) 을 피합니다.
(acos는 상대적으로 비용이 크고, 불필요한 경우가 많습니다)
대신 코사인을 이용해 이렇게 바꿉니다:
정규화된 벡터에서 cos(θ)가 바로 Dot(f, d) 이므로 최종적으로:
Dot(f, d) ≥ cos(FOV/2)
이 조건이면 대상은 시야각 안에 있습니다.
예시:
| [2D-Platformer] 3. 점프 구현하기 (Jump) (0) | 2025.12.27 |
|---|---|
| [2D Platformer] 2. 사다리 로직 구현 (Climbing Ladder) (0) | 2025.12.26 |
| [2D Platformer] 1. START & 좌우 이동 구현 (0) | 2025.12.22 |
| 유니티에서 Oculus Meta Quest3 빌드하기 (1) | 2024.02.14 |
| 유니티 2D게임 만드는중ㅋㅋ (1) | 2024.02.11 |