TA

TA 2강 / Vector

jh009 2026. 6. 19. 11:23

게임 개발에서 가장 기본적으로 사용되는 수학 개념인 벡터를 학습

게임 오브젝트의 위치와 움직임을 표현하는 기본 자료 구조로 이해

질문 필요한 개념
플레이어는 어디에 있는가? 위치
적은 플레이어 기준 어느 방향에 있는가? 방향 벡터
플레이어와 적은 얼마나 떨어져 있는가? 거리
공격 사거리 안에 적이 있는가? 거리 판정
목표 지점으로 이동하려면 어떻게 해야 하는가? 정규화 + 이동량
이펙트나 총알은 어느 방향으로 나가야 하는가? 방향 벡터

 

위치

오브젝트가 공간 안에서 어디에 있는지를 나타냄

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