내일배움캠프 38일차 - 언리얼 C++: 장애물을 만들어 플랫포머 구현하기1
"움직이는 장애물"을 활용한 플랫포머 구현
그동안 강의에서 배운 지식을 활용해 움직이는 장애물을 만들어보도록 하자.
움직이는 장애물은 아래의 속성을 가지고 있다.
1) 지정한 범위만큼만 왕복한다.
2) 이동속도가 에디터 변수로 주어진다.
3) 이동범위, 이동속도는 에디터에서도 편집할 수 있어야한다.
4) 이동속도는 난수로 적용될 수 있다.
이를 토대로 움직이는 장애물을 구현해보자.
1. 지정한 범위만큼만 왕복한다.
지정한 범위만큼 왕복하기 위해서는 좌표를 가진 두 벡터를 사용할 수 있겠으나, 이 경우 특정 방향으로만 이동이 제한되어 추가로 이동한 지점을 만들고 싶을 때 추가구현이 어려울 수 있다.따라서 벡터 두개를 사용하는 대신, 언리얼에서 제공하는 USplineComponent를 사용하기로 했다.
스플라인 컴포넌트는 과거 블루프린트를 사용할때도 활용한 컴포넌트로, 에디터에서 만들어진 곡선을 따라 움직임을 구현할 수 있는 유연하고 유용한 컴포넌트이다.
스플라인과 그 곡선을 따라갈 스태틱메시, 그리고 기준점이 되어주는 root를 구현하기 위해 아래의 코드를 사용한다.
| 헤더파일(.h)에서의 선언 |
| 소스파일(.cpp) 구현 |
| EditAnywhere가 적용된 Spline컴포넌트로 이동경로를 직접 정의할 수 있도록 해준다. |
2. 이동속도가 에디터 변수로 주어진다.
이동속도를 에디터에서 편집하기 위해서는 UPROPERTY()를 붙여 에디터에 리플렉션 시켜야한다. 이때, UPROPERTY()의 영향을 받는 것은 바로 밑 변수인 SpeedRange 뿐이며, meta값으로 ClampMin, ClampMax를 적용하면 편집가능한 최소값과 최대값을 조정할 수 있다.
속도를 정의하기 위해서 float을 써도 되나, 해당 프로젝트에서는 4번(이동속도가 난수로 적용)을 위해 난수가 적용되는 범위(Min~Max)를 정의하도록 한다.
| UPROPERTY(ClampMin~Max)가 적용된 변수는 슬라이더의 형태를 갖춘다. |
3. 이동범위, 이동속도는 에디터에서도 편집할 수 있어야한다.
앞의 1, 2번을 진행하는 과정에서 UPROPERTY()를 통해 에디터에 반영할 수 있었다.
1번은 Spline컴포넌트를 통해 이동범위를 제어할 수 있었고,
2번은 meta=ClampMin~Max를 통해 이동속도를 정의할 수 있었다.
그렇다면 에디터에서 편집한 값이 실제로 적용될 수 있도록 동작코드를 작성해보자.
이후 Tick()에서 이동거리 계산 및 스태틱메시의 이동이 시행된다. 여기서 프레임속도 동기화를 위해 실시간으로 증가하는 값(Distance,CurTime)은 DeltaTime을 곱한다.
또한 스태틱메시가 Spline곡선 상에 자리하기 위해 GetLocationAtDistanceAlongSpline()을 사용해 Distance만큼 위치하도록 한다.
댓글
댓글 쓰기