공부용 이모저모
UE4 - 프로그래밍 퀵스타트 본문
프로그래밍 퀵스타트
첫 코드 프로젝트를 만들고, C++ 클래스를 새로 추가해 봅니다.
docs.unrealengine.com
언리얼 도큐먼트에 있는 예제를 따라해보기로 했다.
언리얼 엔진 4.26.2버전으로 시작.
자세하게 써있어서 굳이 일일히 설명은 안하고 유의사항만 적는다.

FVector NewLocation = GetActorLocation();
float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
NewLocation.Z += DeltaHeight * 20.0f; //Scale our height by a factor of 20
RunningTime += DeltaTime;
SetActorLocation(NewLocation);
UE_LOG(LogTemp, Log, TEXT("%f"), GetActorLocation().Z);
해당 코드는 해당 액터의 Location(회전) 벡터를 받아다
Z값으로 값을 더해서 이동시키는걸 의미한다.
RunningTime - 예제에서 헤더에 추가한 변수
DeltaTime - 매 틱마다 받아오는 수치로, 틱당 넘어가는 시간을 float값으로 얻은것.
GetActorLocation - 로케이션 정보를 받아온다.
SetActorLocation - NewLocation - GetActorLocation(). 넣은 값에서 현재 로케이션을 뺀 결과를 저장한다.
그냥 현재 로케이션 값으로 바꾸는 거라고 생각하면 된다.

신기하게도 분명 더하기만 하는 코드인데, 올라갔다 내려갔다를 반복한다.

float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
Sin이 어떻게 돌아가는지 체크하면 저 원리의 결과는 간단하다.

Sin을 뺄 경우, DeltaTime만을 넣은것이나 다름 없기 때문에 액터는 하늘로 계속 올라간다.
하지만 Sin을 집어넣은 결과에서는 -1 ~ 1의 결과만을 도출시킨다.
즉 프레임은 무한하게 상승하지만(정확히는 일정시간이 지나면 -값으로 돌아오기는 한다)
Sin 결과값에 의해 오르내리도록 치환된다.
이번 예제를 잘보면 NewLocation.Z = DeltaHeight * 20.0f로 되어있는데,
액터의 Z를 체크해보면 180~ 220 사이에서 와리가리 하고 있다는것을 알 수 있다.(최초 위치가 200이기 때문)
-1 ~ 1의 결과값에 20을 곱했기 때문에 일어나는 현상이다.

180을 기점으로 다시 수치가 올라가고 있다.
정작 이 원리에 대한 설명은 저 사이트에서 하나도 써있지 않아 아쉬울 따름이다.
해외 포럼에서도 FMath:Sin으로 검색하면 이 원리에 대한 질문글이 여럿 보일정도이다.



https://docs.unrealengine.com/4.26/ko/ProgrammingAndScripting/ProgrammingWithCPP/CPPTutorials/
C++ 프로그래밍 튜토리얼
언리얼 엔진 프로그래밍에 대한 실전 학습용 단계별 안내서입니다.
docs.unrealengine.com
언리얼에서 기본 제공해주는 C++ 관련 예제들로 이어진다.
'UE4 - C++' 카테고리의 다른 글
| UE4 - 애니메이션 몽타주 (0) | 2021.09.09 |
|---|---|
| UE4 - 점프기능 구현 (0) | 2021.08.31 |
| UE4 - 일인칭 슈팅 C++ 튜토리얼 (0) | 2021.07.23 |
| UE4 - 플레이어 입력 및 폰 (0) | 2021.07.21 |
| UE4 - 게임조종 카메라 (0) | 2021.07.21 |