게임 수학 · 게임 AI 기초집LESSON 03
벡터 기초
난이도입문
예상 시간35분
선수지식2강의 좌표계
3강. 벡터 기초
1. 이번 강의에서 해결할 문제
FVector를 모두 위치라고 생각해 방향 벡터에도 월드 좌표를 더하고, 속도와 한 프레임 이동량을 혼동합니다. 같은 자료형이 나타내는 물리적 의미를 문맥으로 구분합니다.
2. 학습 목표
3. 핵심 개념
FVector(X, Y, Z)는 세 숫자의 묶음이지만 의미와 단위는 변수 이름과 연산이 정합니다.
| 이름 | 예 | 의미·단위 |
|---|---|---|
| Position | PlayerLocation | 월드 원점에서 위치, cm |
| Displacement | Target - Enemy | 적에서 목표까지 변화량, cm |
| Direction | Displacement 정규화 | 방향만, 단위 없음 |
| Velocity | Direction × Speed | 초당 이동량, cm/s |
위치 두 개를 더하는 것은 대부분 의미가 없지만, 위치에서 위치를 빼면 변위가 됩니다. 방향과 속도를 구분하면 프레임 시간 적용 위치도 명확해집니다.
4. 단계별 실습
C++ · 파일 경로: Source/TopDownSurvival/AI/VectorVisualizer.h
VectorVisualizer.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "VectorVisualizer.generated.h"
UCLASS()
class TOPDOWNSURVIVAL_API AVectorVisualizer : public AActor
{
GENERATED_BODY()
public:
AVectorVisualizer();
protected:
virtual void BeginPlay() override;
UPROPERTY(EditInstanceOnly, Category = "Math")
TObjectPtr<AActor> TargetActor;
};
C++ · 파일 경로: Source/TopDownSurvival/AI/VectorVisualizer.cpp
VectorVisualizer.cpp
#include "AI/VectorVisualizer.h"
#include "DrawDebugHelpers.h"
AVectorVisualizer::AVectorVisualizer()
{
PrimaryActorTick.bCanEverTick = false;
}
void AVectorVisualizer::BeginPlay()
{
Super::BeginPlay();
if (!IsValid(TargetActor)) return;
const FVector Start = GetActorLocation();
const FVector End = TargetActor->GetActorLocation();
const FVector ToTarget = End - Start;
UE_LOG(LogTemp, Display,
TEXT("ToTarget=%s Length=%.1fcm"), *ToTarget.ToString(), ToTarget.Size());
DrawDebugDirectionalArrow(
GetWorld(), Start, End, 80.0f, FColor::Cyan, true, 10.0f, 0, 4.0f);
}
Unreal Editor 작업
레벨에 VectorVisualizer와 플레이어를 배치하고 TargetActor를 연결합니다. 두 Actor 위치를 바꾸며 화살표 방향과 로그 길이를 비교합니다.
5. 코드와 수학·AI가 동작하는 이유
목표 위치 T에서 적 위치 E를 빼면 D = T - E가 적에서 목표로 향하는 변위가 됩니다. D의 크기 |D|는 거리이고, 다음 강의에서 D를 정규화하면 길이 1인 방향을 얻습니다. Debug Arrow는 추상적인 세 숫자를 공간에서 확인하게 합니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2벡터 기초 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
3강. 벡터 기초 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.