본문 바로가기

Unreal/Udemy 강의

Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-14

FMath::VInterpConstantTo

이제 우리가 만들었던 비밀문을 움직일 수 있게 만들어야 한다.

여기서 필요한 함수가 제목에 적혀있는 FMath에 속한 VInterpConstantTo 함수이다.

해당 함수는 현재 위치에서 목표위치로 일정한 속도로 움직이게 하는 함수이다.

그럼 이를 위해 먼저 필요한 변수들을 헤더에서 선언해주자.

 

먼저 이동거리를 나타낼 MoveOffset이 필요하다.

벡터 타입이며, 향후 X, Y, Z 축 중 원하는 방향으로 이동할 지 정하게 된다.

 

다음으로 이동시간을 나타낼 MoveTime이다.

우선 4초로 설정해주었다.

 

그리고 비밀문이 아무때나 열리는 것이 아니라, 특정 조건을 만족할 때 열려야 하므로 bool 타입 변수도 하나 선언하였다.

기본값은 false이다.

 

이제 cpp 파일에서 구현을 하기에 앞서, VInterpConstatTo 함수를 사용하기 위해 헤더파일을 포함시켜주어야 한다.

우리가 포함시켜줄 헤더는 다음과 같다.

 

이제 본격적으로 구현을 하게 된다.

먼저 현재 위치를 알아야 한다.

현재 위치는 GetOwner() -> GetActorLocation()을 통해 액터의 위치를 받아서 저장한다.

 

다음으로 목표 위치이다.

목표 위치는 기존 원래 위치에서 이동할 거리인 MoveOffset을 더한 거리이다.

여기서 원래 위치를 구하기 위해 다시 헤더로 돌아가서 벡터타입 OriginalLocation을 선언해주었다.

Original이므로 BeginPlay()에서 GetOwner()->GetActorLocation()으로 위치를 받아주었다.

Tick에서 선언한다면 이동하며 매번 현재 위치가 바뀌므로 BeiginPlay에서 선언하고 가져와야한다.

 

DeltaTime의 경우 그대로 넣어주고, 마지막 Speed를 넣어줄 차례이다.

Speed의 경우 원래 위치와 목표 위치의 거리에서 우리가 정한 속도는 MoveTime을 나눠주면 속도가 나오게 된다.

거리의 경우 FVector::DisTance() 함수를 통해 구해준다.

 

이제 컴파일을 해주고, 문이 아래로 내려가도록 언리얼에서 MoveOffset의 Z 값을 -600을 주었다.

실행을 해보면 바로 오류가 발생한다.

이는 비밀문 액터의 모빌리티 상태가 스태틱으로 되어있기 때문에 발생한다.

우리는 게임 플레이 중에도 움직일 수 있어야하므로 모빌리티를 무버블로 변경해주어야 한다.

 

이제 무사히 비밀문이 지하로 내려가는 모습을 볼 수 있다.

하지만 지금 상태는 무조건 내려가는 상태이다.

우리는 특정한 조건하에 내려가는 것을 원한다.

따라서 헤더에서 선언했던 bool 타임 변수가 True일 때만 작동하도록 코드를 수정해준다.

 

이제 실행을 다시 해보면, 기본 값이 false이므로 움직이지 않는다.

F8을 눌러서 실행 중인 게임화면에서 벗어나, 해당 변수를 true로 바꿔주면 다시 움직이는 것을 볼 수 있다.