2026-03-20(금) FVector, FRotator, ForwardVector, 디버깅

조범근·2026년 3월 20일

TIL

목록 보기
23/28

C++ Week 4

Blueprint에서 만졌을때 함수들을 다 가져와서 쓸 수 있다는 사실을 깨닫고 나서는 좀 친숙해진 것 같다.

Study

과제 5번, 알고리즘 1문제 , 언리얼 C++, 디버깅


Today I Learned


언리얼 C++

FVector

FVector는 일단 Location의 x, y, z값을 저장하는 구조체라고 생각하면 됨
FVector.X 이런식으로도 쓸 수 있음

FVector 에는 왜 float을 써야할까

일반 C++에서는 정밀도 때문에 double을 자주 쓰지만 언리얼에서는 FVector가 내부적으로 float기반이다.

만약 double을 쓰면 동작을 하긴하는데 FVector랑 섞이면 형변환이 필요할 수 있기 때문에
float을 쓰는걸 추천
한다.

GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, 
    FString::Printf(TEXT("Location: %s"), *GetActorLocation().ToString()));

GEngine -> 언리얼에게 명령을 내릴때 사용

AddOnScreenDebugMessage -> 왼쪽 위 채팅창에 출력

AddOnScreenDebugMessage(-1,5.f,FColor::Yellow, FString::Printf(TEXT(""),*GetActorLocation().ToString()));

  • -1 -> 새 메시지로 계속 추가
  • 5.f -> 5초동안 표시
  • FColor::Yellow -> 채팅 색깔 노란색
  • *GetActorLocation().ToString() -> FVector를 문자열로 바꿔줌 x, y, z 값을 하나하나 풀어서 써도됨

GetActorLocation().ToString()에서 *는 문자열을 하나하나 TCHAR 포인터로 꺼내는 연산자 C++의 포인터*랑 다른 개념.

쉽게 말하면 FString이라는 상자 안에서 실제 문자열 데이터를 꺼내는 것이다.

FString을 언제 쓸까요

%s 포맷에 FString 넣을 때만 *을 붙인다.




FRotator

FRotator는 X(Roll), Y(Pitch), Z(Yaw) 값을 저장하는 자료형

FRotator.Roll 이런식으로 사용 가능




방향벡터(ForwardVector)의 이해

Problem

Distance값을 넣으면 X의 값이 움직이는 ActorMove
Rotation값을 넣으면 Z(Yaw) 값이 회전하는 ActorTurn

함수를 만들어 랜던값을 10번 넣게 만들었는데

for(int i = 0; i < RandomCount; ++i){
	 ActorMove(Random)
	 ActorTurn(Random) 
}

출력해보니 Z의 값은 바뀌지 않고 X의 값만 변하는 걸 확인.


방향이 바뀌면 X가 보는 방향과 Z값이 변해야 하는 것이 아닌가?

맞다. 단 액터가 현재 바라보는 방향을 기준으로 앞뒤가 바뀐다면 말이다.
그래서 어떻게 바꿔야할지 알아봤음.


Solution

GetActorForwardVector() 함수는 액터가 현재 바라보는 방향을 단위 벡터로 반환한다.

어떻게 방향을 바꾸는 걸까
단위 벡터란? -> 크기가 1인 벡터

예를 들면

X(Roll)가 0도면 -> (1, 0, 0) X축 방향을 바라보고 있는 것

Y(Pitch)가 90도면 -> (0, 1, 0) Y축 방향을 바라보고 있는 것

Z(Yaw)가 180도면 -> (-1, 0, 0) X축 반대 방향을 바라보고 있는 것

이 값에 Distance를 곱하면 그 방향으로 Distance만큼의 벡터가 나옴.
그래서 이 '바라보는 앞' 이라는 것은 rotation(0, 0, 0) 일때 기준의 앞

즉, SetActorRotation으로 회전값을 바꾸면 GetActorForwardVector()가 반환하는 값도 바뀜


FVector::Dist(A, B)

FVector::Dist(A, B) A, B 사이의 거리를 구할때 쓸 수 있음.
얘도 거리값이므로 float 자료형으로 만들어주는게 좋음


sort, find 같은 Std컨테이너들도 못쓸까?

std::vector   → TArray
std::map      → TMap
std::set      → TSet
std::queue    → TQueue
std::sort     → TArray.Sort()
std::find     → TArray.Contains(), TArray.Find()

크게 바뀐건 없는듯. TArray 말고는


0개의 댓글