TIL(Today I Learned)
오늘은 과제로 플랫포머 게임 만들기를 수행해보았다.
플랫포머 게임의 월드는 전에 자동문 만들기에서 사용했던 online learning kit 에셋을 사용할 것이다.
플랫포머 게임하면 딱 떠오르는 이미지가 Flappy Bird나 슈퍼마리오 이런 2D게임이 떠올랐다.

물론 3D 플랫포머도 있겠지만 2D로 만드는 것이 더 적절해 보일 것 같아서 고민을 좀 해보았다.
고민 끝에 든 생각은, 카메라는 고정을 하고 좌우로만 움직이면 될 것 같았다.
그리고 3D 에셋이라는 점을 고려하여 카메라 효과를 좀 주면 재밌어 보일것이라 생각했다.
결과물 링크
완성된 레벨은 아래 그림과 같다.
맵이 작기 때문에 캐릭터의 스케일을 작게 만들어 상대적으로 커보이게 만들었다.

모든 요소들은 강의에 있는 내용을 토대로 만들었다.
만들어진 블루프린트를 거의 그대로 사용하였고, 카메라 효과나 상황에 맞는 블루프린트를 추가해주었다.
2D 게임이기 때문에 이미 만들어진 블루프린트에서 좌우로만 움직이게 만들어주고 싶었다.
앞 뒤 움직임은 제어하기 위해 Forward Vector를 입력받는 Movement Input 노드는 링크를 끊어주었다.

그리고 카메라 방향의 링크도 끊어주어 마우스로 카메라를 조정하는 효과도 제거해주었다.

다음 카메라를 회전 시키는 효과를 넣어주고 싶었다.
먼저 Event Begin Play에 스프링암 컴포넌트의 Rotation 정보를 가져와서 Rot변수에 저장해주었다. 현재 카메라의 Rotation은 z값이 -90이다.

타임라인을 사용하여 카메라를 회전 시키는 효과를 만들었다.
키보드 숫자 1을 눌렀을 때는 Play로 1을 한 번 더 눌렀을 때는 Reverse로 타임라인을 연결하고 저장한 Rotation으로부터 90까지 보간을 해주어 스프링암의 회전을 설정해주었다.

결과물을 보면 2D 플랫포머면서 3차원 공간을 다 볼 수 있는 카메라 전환이 가능해졌다.

다음 전반적인 게임 스테이지를 살펴보면, 간단하게 2층의 스테이지이다.
1층

2층

처음은 점프만 하는 구간이다.

레벨에 있는 오브젝트들을 복사해서 구성했고, 점프만하는 구간은 특별히 설명할게 없을 것 같다.
그 다음은 위 아래로 움직이는 액터를 넣었다.

이것을 넣는 방법은 간단한데 블루프린트 클래스를 만들고, 무브먼트 컴포넌트에 보간이란 컴포넌트를 추가한 뒤 컨트롤에서 기간을 조정하고 인덱스를 추가한 뒤 증감할 위치 정보를 입력한다.

그리고 계단을 올라가면

벽에 박힌 자동차가 있다.
이것은 트리거 박스 이벤트로부터 다음 위치로 올라갈 수 있는 역할을 하게 만들어주었다.
자동문을 만들었을 때와 똑같은 블루프린트를 만들었다. 트리거 박스를 만든 후 자동차 액터를 참조하여 오버랩 이벤트가 발생했을 때 자동차의 위치를 조정하게 만들어주었다.

오버렙이 끝난 뒤에는 3초 딜레이를 넣어 3초안에 다음 위치로 이동하지 않으면 다시 벽에 박히도록하였다.

그 다음 전기줄에 올라갈 것인데
전기줄의 콜리전은 단순한 사다리꼴 모양이라 전기줄에 올라가도 자연스럽지 않을 것이다.

상단 메뉴의 자동 컨벡스 콜리전을 적용해주면 자연스러운 콜리전으로 변환할 수 있다.


마지막은 방방이로 올라가는 효과이다.

캐릭터와 액터가 Hit 되었을 때를 이벤트로 받아 Launch Character 함수로 Target을 날려주면 된다. 뒤쪽 코드는 사운드와 이펙트 효과이다. 좌우 이동과 위로 날리는 것을 생각하여 구조체 핀 분할을 한 후 X와 Z 값만 사용하였고, Launch Velocity로 받는 값을 조정하여 적절한 위치로 점프하도록 조정해주었다.
