게임 개발에서 가장 기본적으로 사용되는 수학 개념인 벡터를 학습
게임 오브젝트의 위치와 움직임을 표현하는 기본 자료 구조로 이해
| 질문 | 필요한 개념 |
| 플레이어는 어디에 있는가? | 위치 |
| 적은 플레이어 기준 어느 방향에 있는가? | 방향 벡터 |
| 플레이어와 적은 얼마나 떨어져 있는가? | 거리 |
| 공격 사거리 안에 적이 있는가? | 거리 판정 |
| 목표 지점으로 이동하려면 어떻게 해야 하는가? | 정규화 + 이동량 |
| 이펙트나 총알은 어느 방향으로 나가야 하는가? | 방향 벡터 |
위치
오브젝트가 공간 안에서 어디에 있는지를 나타냄
Player Position = (0, 0, 0)
Enemy Position = (300, 400, 0)
위치 자체는 방향이 아님
위치 = 좌표
방향 = 두 위치의 차이
벡터
X, Y, Z 값을 가진 자료형
게임에서는 같은 Vector3라도 상황에 따라 다르게 해석함
| 사용 방식 | 의미 |
| 위치 | 오브젝트가 어디에 있는가 |
| 방향 | 어느 방향을 향하는가 |
| 이동량 | 한 번에 얼마나 이동하는가 |
| 속도 | 어느 방향으로 얼마나 빠르게 움직이는가 |
| 거리 | 두 지점 사이의 길이 |
방향
두 위치의 차이로 구함
Direction = Target Position - Start Position
// 플레이어에서 적을 향하는 방향 벡터 예시
Player Position = (0, 0, 0)
Enemy Position = (300, 400, 0)
ToEnemy = Enemy Position - Player Position
ToEnemy = (300, 400, 0)
거리
벡터의 길이로 구함
Distance = Length(Target - Start)
// 예시
ToEnemy = (300, 400, 0)
Length = sqrt(300 * 300 + 400 * 400 + 0 * 0)
Length = sqrt(250000)
Length = 500
정규화
벡터의 길이를 1의 단위로 만드는 과정
원래 벡터 = 방향 + 거리
정규화된 벡터 = 방향만 남은 벡터
ToEnemy = (300, 400, 0)
Length = 500
Normalized = (300 / 500, 400 / 500, 0 / 500)
Normalized = (0.6, 0.8, 0)
이동량
// 공식
Movement = Direction * Speed * DeltaTime
// 위치 계산
NextPosition = CurrentPosition + Movement
Target - Start
-> 방향 벡터 구하기
-> Length로 거리 구하기
-> Normalize로 방향만 남기기
-> Direction * Speed * DeltaTime
-> 한 프레임 이동량 구하기
-> CurrentPosition + Movement
-> 다음 위치 구하기
핵심 코드 구조
class Vector3
{
public:
float X;
float Y;
float Z;
Vector3();
Vector3(float x, float y, float z);
Vector3 operator+(const Vector3& other) const;
Vector3 operator-(const Vector3& other) const;
Vector3 operator*(float scalar) const;
float Length() const;
Vector3 Normalize() const;
void Print() const;
};
| 코드 | 의미 |
| EnemyPosition - PlayerPosition | 플레이어에서 적을 향하는 벡터 |
| ToEnemy.Length() | 플레이어와 적 사이의 거리 |
| ToEnemy.Normalize() | 적을 향하는 방향만 남긴 벡터 |
| Direction * Speed * DeltaTime | 한 프레임 동안 이동할 양 |
| PlayerPosition + Movement | 다음 위치 |
상황
Vector3PlayerPosition(0.0f,0.0f,0.0f);
Vector3EnemyPosition(300.0f,400.0f,0.0f);
상황에서의 결과값
| 계산 항목 | 결과 |
| 플레이어에서 적을 향하는 벡터 | (300, 400, 0) |
| 플레이어와 적 사이 거리 | 500 |
| 정규화된 방향 벡터 | (0.6, 0.8, 0) |
| 한 프레임 이동량 | Direction * Speed * DeltaTime |
| 다음 위치 | PlayerPosition + Movement |
'TA' 카테고리의 다른 글
| TA 1강 / TA이해하기 (0) | 2026.06.11 |
|---|