Blueprint에서 만졌을때 함수들을 다 가져와서 쓸 수 있다는 사실을 깨닫고 나서는 좀 친숙해진 것 같다.
과제 5번, 알고리즘 1문제 , 언리얼 C++, 디버깅
FVector는 일단 Location의 x, y, z값을 저장하는 구조체라고 생각하면 됨
FVector.X 이런식으로도 쓸 수 있음
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이라는 상자 안에서 실제 문자열 데이터를 꺼내는 것이다.
%s포맷에 FString 넣을 때만*을 붙인다.
FRotator는 X(Roll), Y(Pitch), Z(Yaw) 값을 저장하는 자료형
FRotator.Roll이런식으로 사용 가능
Distance값을 넣으면 X의 값이 움직이는ActorMove
Rotation값을 넣으면 Z(Yaw) 값이 회전하는ActorTurn
함수를 만들어 랜던값을 10번 넣게 만들었는데
for(int i = 0; i < RandomCount; ++i){
ActorMove(Random)
ActorTurn(Random)
}
출력해보니 Z의 값은 바뀌지 않고 X의 값만 변하는 걸 확인.
맞다. 단 액터가 현재 바라보는 방향을 기준으로 앞뒤가 바뀐다면 말이다.
그래서 어떻게 바꿔야할지 알아봤음.
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) A, B 사이의 거리를 구할때 쓸 수 있음.
얘도 거리값이므로 float 자료형으로 만들어주는게 좋음
std::vector → TArray
std::map → TMap
std::set → TSet
std::queue → TQueue
std::sort → TArray.Sort()
std::find → TArray.Contains(), TArray.Find()

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