이번에는 플레이어의 캐릭터에 벽 슬라이딩, 벽 점프, 대쉬를 구현해 볼 것이다.
다양한 모션이 필요해서 에셋을 새로 하나 구해서 적용하였다.
플레이어가 벽 슬라이딩을 하기 위한 조건을 따지는 분기점이다.
캐릭터의 z방향 속도가 -50 이하이고 벽을 향하여 플레이어가 방향키를 누르고 있으면 벽 슬라이딩을 하는 조건이 된다.
위의 조건을 만족하면 라인 트레이스 함수로 벽을 찾는다.
캐릭터의 위치 벡터에 (캐릭터의 정면 단위 벡터 x 변수)를 더해 캐릭터에서 캐릭터의 정면으로 향하는 선을 만든다.
이 선이 WorldStatic 콜리전(벽)을 만나면 캐릭터의 z 속도만 조절하여 천천히 내려오도록 만든다.
위와 같이 노드로 접어서 정리한다.
다음은 벽 점프이다.
점프 버튼을 눌렀을 때 앞에서 만든 Is Wall Sliding 변수로 벽 슬라이딩을 하고 있지 않으면 그냥 점프를 한다.
벽 슬라이딩을 하고 있으면 위와 같이 Launch Character 함수를 이용하여 적당한 값으로 캐릭터를 발사(점프)한다.
벽 슬라이딩과 대쉬 애니메이션을 State Machine에 추가한다.
조건은 Is Wall Sliding과 Is Dash로 간단히 만들 수 있다.
마우스 우클릭을 대쉬로 새로 입력을 만들었다.
공중에서 한번만 대쉬를 사용하게 제한하기 위해서 여러 고민과 인터넷 조사를 하였다.
해외 사이트에서 찾은 방법이 가장 깔끔한거 같아서 이 방법을 썼다.
위와 같이 Can Air Dash 변수를 만들어서 대쉬 버튼을 누를 때 조건을 확인한다.
슬라이딩을 위해 플러그인한 Apply Root Motion Constant Force 함수를 불러 대쉬를 적용한다.
한번 대쉬를 하고 나면 Can Air Dash가 False가 되고 다시 땅에 닿아야만 True로 바꾸면 공중에서 한번만 대쉬를 할 수 있도록 제한할 수 있다.
이를 위해 이벤트 틱에서 Is Falling 함수를 통해 캐릭터가 공중에 있지 않을 시(땅에 있을 시) Can Air Dash를 True로 Set하여 해결 할 수 있었다.
즉, 땅에 있으면 항상 Can Air Dash가 True로 매 틱마다 적용되지만 점프를 한 순간 갱신이 되지 않고 공중에서 대쉬를 쓰면 Can Air Dash가 Flase로 바뀌어 2번째 대쉬가 나가는 것을 막는다.
다시 땅에 닿으면 Can Air Dash가 True로 다시 갱신된다.
벽 슬라이딩, 벽 점프, 대쉬, 공중 대쉬 1번으로 제한 등 전부 잘 동작하는 것을 볼 수 있다.
대쉬를 할때 무적이 없어 데미지를 입는데 다음작업으로 이를 해결 해 볼 것이다.
'언리얼 - 게임 개발' 카테고리의 다른 글
첫 게임 개발(15) _ EQS 기초 (0) | 2024.06.24 |
---|---|
첫 게임 개발 (14) _ 능력 구현 (1) | 2024.06.23 |
첫 게임 개발 (12) _ Inventory _ 체력 UI 구현 (0) | 2024.06.21 |
첫 게임 개발 (11) _ Inventory _ UI 및 체력시스템 설계하기 (0) | 2024.06.21 |
첫 게임 개발 (10) _ Inventory _ 위젯 구현하기 (0) | 2024.06.21 |