[UE4] Parkour 기능 -3 (Slide, Short/Normal/Wall)
🏃♀️ 파쿠르 Type별 체크하기 : Slide
Do Parkour 함수에서 Climb 파쿠르가 아니라면 다음으로는 Slide 모드가 가능한지를 검사한다.
슬라이드를 실행할때는 캐릭터의 발 앞에 붙어있는 Floor Arrow에 충돌되는 장애물이 있는지 검사해야 한다.
발 앞에 무언가가 있다면 슬라이딩이 불가능하기 때문에, 충돌되는 장애물이 없는 경우 Slide Mode 설정을 시작한다.
Slide 모드도 Climb와 마찬가지로 일정 거리 안에 위치하는 경우에만 파크루를 실행할 수 있도록 조건문을 수행해주었다.
Slide Mode는 캐릭터가 슬라이드할 수 있는 장애물 아래의 공간을 Box Trace로 검사하였다.
캐릭터 발 앞에 위치하는 Floor Arrow를 장애물의 Extent 값인 높이만큼 위로 올린 위치를 Box Trace의 시작점으로 설정하였고, Arrow를 올린 지점에서 Extent만큼 Y, Z를 넓혀 Trace Box를 생성해주었다.
Box Trace By Channel 함수의 Half Size 속성을 이용해서 같은 크기만큼 양쪽 넓이를 확장하는 기능을 사용했다.
이때 Y, Z축만 Extent 너비만큼 넓혔기 때문에 X값을 지정해줘야 하는데, 길이 X는 Trace Distance(600)만큼 길이를 설정해서 End 값으로 지정해주었다. (이때 Character의 Forward Vector를 불러올 때, Arrow의 높이만큼 Start에서 높여놨으므로 End에 또 높이면 안되니까 Z축 값은 빼고 계산해야한다.)
Box Trace가 성공적으로 실행되며 Slide할 장애물 아래로 Box가 잘 통과되는 모습이다.
Check Slide Mode가 끝나고 True가 반환되면 Slide 몽타주가 실행된다. 이때, 캐릭터가 장애물 아래를 Slide할때 장애물의 Collision을 꺼주지 않으면 캐릭터의 콜리전이 장애물에 걸려 슬라이드 몽타주만 실행되고, 장애물 아래로 이동하진 못한 채 제자리에 위치하게 된다.
따라서 앞에 있는 슬라이드 장애물을 Backup 변수에 저장해둔 뒤, 해당 Collision의 Enable을 비활성화시키고, 몽타주가 끝날때 실행되는 End Parkour 에서 다시 Backup 장애물의 Collision Enable을 활성화시켜 원상복귀 해주었다.
🏃♀️ 파쿠르 Type별 체크하기 : Short, Normal, Wall
마지막으로, 거리에 따라 동작이 달라지는 Short, Normal, Wall 파쿠르를 구현하였다.
세 개의 파쿠르는 같은 하나의 Check Parkour함수를 사용하여 구현하였다.
캐릭터가 Climb, Slide 파쿠르에도 반환되지 않았다면, 다음으로 Short, Normal, Wall 파쿠르가 가능한지를 검사한다.
Check Obstacle Mode에서 가장먼저 캐릭터의 머리 앞에 위치하는 Ceil Arrow에 충돌되는 장애물이 있는지를 검사한 뒤, 충돌된 액터가 있다면 함수의 입력으로 받은 Enum값에 해당하는 Datas 배열 값을 모두 검사한다.
이후 for문을 돌면서 장애물의 Extent 값을 사용하여 좌우 두께를 검사하였고, 그 결과로 Short인지 Normal인지 Wall인지를 검사하였다.
정리하자면, 입력받은 Enum값들을 차례로 검사하면서, Datas 배열에서 캐릭터와 장애물 간의 거리와 일치하는 하나의 Data를 찾고, 그 Data의 좌우 두께를 검사하여 입력받은 Parkour Type과 동일하다면 파쿠르가 가능한 상태임을 반환하는 것이다.
위는 완성된 파쿠르 전체 동작 영상이다.