010-2135-9730무료 상담
연습 루틴

게임 수학: 벡터 연습 문제

벡터 공식을 외웠는데 코드에서 쓰지 못한다면, 공식을 게임 상황에 적용하는 연습이 부족한 것입니다. 이 글은 개념 설명보다 직접 풀어 보는 문제에 집중합니다. 위치와 이동, 거리와 정규화, 내적으로 시야 판정, 외적으로 좌우 판정 순서로 문제를 풀고, 마지막에 엔진에서 같은 계산을 코드로 확인해 보면 벡터가 도구로 바뀝니다.

읽는 시간 약 7분게임프로그래밍
게임프로그래밍 과정
이 글과 연결된 과정게임프로그래밍 과정 알아보기

혼자 공부할 때 가장 시간을 많이 잡아먹는 것은 오류입니다. 같은 오류를 몇 시간씩 붙잡고 있다가 포기하는 경우가 많습니다. 수업에서는 오류 메시지를 읽는 법…

문제를 풀기 전에 정리할 네 가지 계산

벡터는 방향과 크기를 함께 가진 값입니다. 게임에서는 위치, 이동 방향, 속도, 바라보는 방향을 모두 벡터로 나타냅니다. 연습 문제에 들어가기 전에 다음 네 가지 계산만 확실히 해 둡니다.

  • 덧셈과 뺄셈: 같은 성분끼리 더하고 뺀다. B에서 A를 빼면 A에서 B로 가는 벡터가 된다
  • 길이: 각 성분을 제곱해 더한 뒤 제곱근을 구한다
  • 정규화: 벡터를 자기 길이로 나눠 길이를 1로 만든다. 방향만 남긴다
  • 내적: 같은 성분끼리 곱해 모두 더한다. 두 방향이 얼마나 같은 쪽을 보는지 알려 준다

외적은 3D에서 두 벡터에 모두 수직인 벡터를 구하는 계산으로, 문제 4단계에서 다룹니다. 아래 문제는 모두 2D 또는 3D 좌표로 손계산이 가능하게 만들었습니다. 먼저 종이에 풀고, 그다음 코드로 확인하는 순서를 지켜 주세요.

1단계 문제: 위치와 이동

  1. 플레이어가 (2, 3)에 있고 매 프레임 (1, 0)만큼 움직인다. 세 프레임 뒤 위치는?
  2. 적이 (5, 1), 플레이어가 (2, 5)에 있다. 적에서 플레이어로 향하는 벡터는?
  3. 총알이 (0, 0)에서 출발해 방향 (3, 4)로 날아간다. 이 방향 벡터의 길이는?
  4. 1번에서 이동량을 두 배로 하면 세 프레임 뒤 위치는?

풀이 방향입니다. 1번은 이동량을 세 번 더하면 (5, 3)입니다. 2번은 도착점에서 출발점을 빼므로 (2, 5)에서 (5, 1)을 빼 (-3, 4)가 됩니다. 이 순서를 거꾸로 하면 방향이 반대가 되는 실수가 가장 흔합니다. 3번은 3과 4를 제곱해 더한 25의 제곱근인 5입니다. 4번은 벡터에 숫자를 곱하면 방향은 그대로이고 크기만 바뀐다는 점을 확인하는 문제로, 답은 (8, 3)입니다.

2단계 문제: 거리와 정규화로 추적 만들기

  1. 적 (0, 0)과 플레이어 (6, 8) 사이 거리는?
  2. 적이 플레이어를 향해 한 프레임에 2만큼 움직이려면 이동 벡터는?
  3. 탐지 범위가 5일 때, 1번 상황에서 적은 플레이어를 발견하는가?
  4. 대각선 입력 (1, 1)을 그대로 쓰면 왜 대각선 이동이 빨라지는가?

1번은 차이 벡터 (6, 8)의 길이인 10입니다. 2번이 이 단계의 핵심입니다. 방향 벡터 (6, 8)을 길이 10으로 나눠 정규화하면 (0.6, 0.8)이 되고, 여기에 속도 2를 곱하면 (1.2, 1.6)입니다. 정규화 없이 (6, 8)에 속도를 곱하면 거리가 멀수록 적이 빨라지는 버그가 생깁니다. 3번은 거리 10이 범위 5보다 크므로 발견하지 못합니다.

4번은 실제 게임에서 자주 보이는 버그입니다. (1, 1)의 길이는 약 1.41이므로 정규화하지 않으면 대각선으로 움직일 때 약 1.4배 빨라집니다. 입력 벡터를 정규화한 뒤 속도를 곱하면 해결됩니다. 거리 비교만 필요할 때는 제곱근을 생략하고 거리의 제곱끼리 비교하면 계산을 줄일 수 있다는 점도 함께 기억해 두세요.

3단계 문제: 내적으로 시야와 앞뒤 판정하기

  1. 경비병이 (1, 0) 방향을 보고 있다. 경비병에서 플레이어로 향하는 정규화 벡터가 (0, 1)이면 내적은?
  2. 같은 경비병에게 플레이어 방향이 (-1, 0)이면 내적은?
  3. 시야각이 정면 기준 좌우 60도일 때, 내적이 얼마 이상이면 시야 안인가?
  4. 플레이어 방향이 (0.8, 0.6)이면 시야 안에 있는가?

두 벡터가 모두 길이 1이면 내적 값은 두 방향 사이 각도의 코사인과 같습니다. 1번은 0으로, 플레이어가 정확히 옆에 있다는 뜻입니다. 2번은 -1로 정반대, 즉 등 뒤에 있습니다. 3번은 60도의 코사인인 0.5 이상이면 시야 안입니다. 4번은 1 곱하기 0.8 더하기 0 곱하기 0.6으로 0.8이 되어 0.5보다 크므로 시야 안입니다.

이 문제들은 잠입 게임의 경비병 시야, 등 뒤 공격 판정, 카메라 앞에 있는 물체만 처리하는 최적화에 그대로 쓰입니다. 정규화를 빼먹으면 내적 값이 각도를 나타내지 않으므로 꼭 확인하세요.

4단계 문제: 외적으로 좌우와 면의 방향 구하기

외적 문제는 3D 좌표로 풉니다. 첫 번째 문제는 캐릭터가 (0, 0, 1) 방향을 보고 있고 목표가 (1, 0, 0) 방향에 있을 때, 목표가 왼쪽인지 오른쪽인지 판정하는 것입니다. 두 벡터를 외적한 결과의 위쪽 성분 부호로 좌우를 가릅니다. 부호가 어느 쪽을 뜻하는지는 엔진의 좌표계가 왼손 좌표계인지 오른손 좌표계인지에 따라 달라지므로, 직접 계산한 뒤 엔진에서 반드시 확인합니다.

두 번째 문제는 세 점 (0, 0, 0), (1, 0, 0), (0, 1, 0)으로 이루어진 삼각형 면의 법선을 구하는 것입니다. 두 변 벡터 (1, 0, 0)과 (0, 1, 0)을 외적하면 (0, 0, 1)이 나옵니다. 이 법선은 조명 계산과 경사면 판정에 쓰입니다. 바닥의 법선과 위쪽 방향의 내적을 구하면 경사가 너무 가파른지 판단할 수 있다는 점까지 이어서 생각해 보세요.

이름과 연락처만 남기면 담당 멘토가 연락드립니다상담 가능 시간 평일·주말 · 전화 010-2135-9730

손계산 결과를 엔진 코드로 확인하는 마무리 과제

모든 문제를 종이로 풀었다면 유니티나 언리얼에서 같은 상황을 만들어 확인합니다. 큐브 두 개를 놓고 거리와 방향을 로그로 출력하거나, 경비병 큐브가 시야 안에 플레이어가 들어오면 색이 바뀌게 만들어 보세요. 엔진의 벡터 함수 결과가 손계산과 같은지 비교하면서 좌표계 방향도 함께 익힐 수 있습니다.

하루에 한 단계씩 풀고, 주말에 엔진으로 확인하는 일주일 계획이면 부담이 적습니다. 문제를 다 풀었는데도 실제 기능을 만들 때 어떤 계산을 써야 할지 떠오르지 않는다면, SBS아카데미게임학원 게임프로그래밍 과정 상담에서 만들고 싶은 기능을 기준으로 필요한 수학을 함께 짚을 수 있습니다.

자주 묻는 질문

수학을 잘 못해도 게임 프로그래머가 될 수 있나요?

고등 수학 전체보다 벡터, 삼각함수, 행렬의 기본 쓰임을 이해하는 것이 더 중요합니다. 게임 상황으로 문제를 풀어 보면 생각보다 빨리 익숙해집니다.

행렬은 언제 공부하면 되나요?

벡터 계산이 익숙해진 뒤 회전과 좌표 변환을 다룰 때 공부하면 됩니다. 행렬은 벡터를 한 번에 옮기고 돌리는 도구라서 벡터가 먼저입니다.

TIP내 상황에 맞는 답이 필요하다면 무료 상담에서 지금 수준과 목표를 기준으로 구체적으로 안내해 드립니다.

가까운 캠퍼스에서 게임프로그래밍 알아보기

사는 곳과 가까운 캠퍼스를 고르면 수업 내용, 오시는 길, 상담 신청을 한 번에 볼 수 있습니다.

함께 읽으면 좋은 글

Free consulting

게임프로그래밍, 내 상황에서는 어떻게 시작할까요?

글에서 다룬 내용을 내 실력과 목표에 맞춰 담당 멘토가 구체적으로 정리해 드립니다.

  1. 상담 신청서 접수
  2. 담당 멘토가 연락드림
  3. 방문 또는 전화로 진로·과정 상담
전화로 바로 상담010-2135-9730
전화 상담상담 신청