본문 바로가기

Unreal/Udemy 강의

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

로컬 오프셋

탱크를 움직이게 하기 위해서는 일종의 오프셋이 필요하다.

우선 오프셋을 월드 스페이스에 설정할지, 로컬 스페이스에 설정할지 정해야한다.

먼저 월드 스페이스를 살펴보자.

 

현재 월드에서 탱크를 누르면 기즈모가 보인다.

또 해당 기즈모는 좌측 하단에서도 추가로 볼 수 있다.

 

탱크의 기즈모는 회전해도 움직이지 않으며, 대신 좌측 하단의 기즈모는 같이 회전한다.

이는 월드의 방향은 바뀌지 않기 때문에 발생한다.

여기까지는 월드의 좌표계로 본 것이다.

 

이제 로컬 좌표계로 살펴보자.

현재 월드 좌표계를 로컬 좌표계로 바꾸는 방법은 뷰포트 상단에 있는 기능으로 전환이 가능하다.

 

해당 버튼을 누르면 로컬 좌표계로 변환된다.

이제 탱크를 회전하면 탱크의 기즈모도 같이 회전하게 된다.

 

이를 통해 알 수 있는 것은 우리는 로컬 좌표계를 통해 객체를 이동시켜야 하는 것이다.

로컬 좌표계의 X 축이 우리가 원하는 전방을 가리키게 되며, 만약 월드 좌표계를 사용시 앞으로 가는 것을 원하는데 뒤로 가는 상황이 발생할 수 있다.

이를 위한 함수로 AddActorLocalOffset 함수가 존재한다.

해당 함수에 인자가 여러개지만, 우리한테 가장 중요한 것은 첫 번째 인자에 해당하는 호출할 때마다 이동시키고 싶은 거리이다.

나머지는 부가적인 옵션이기 때문에 디폴트로 놔두어도 상관없다.

 

해당 함수는 오프셋을 적용시켜 이동하는데, 이는 단일이동을 의미한다.

따라서 매 프레임마다 해당 함수를 적용시켜 계속하여 이동시켜줄 필요가 있다.

베이스폰에 있는 Tick 함수를 통해 해당 함수를 테스트해보자.

 

X축을 2씩 움직이게 해주었으며, 베이스폰에서 작성한 함수이기에 포탑까지 전부 앞으로 움직이는 모습을 볼 수 있다.

원활한 관찰을 위해서 플레이 방식을 시뮬레이트로 바꿔서 실행하는 방법이 있다.

 

이러면 플레이어(탱크)의 시야가 아니라 넓은 시야에서 모든 객체를 살펴볼 수 있다.

 

테스트를 마쳤으니, 탱크의 Move 함수에서 실제로 Value를 통해 거리를 이동하도록 해주자.

 

이제 우리가 바인드했던 축 매핑을 통해 MoveForwar에 있는 WS의 스케일 값에 맞춰서 앞 뒤로 이동하게 된다.