STEP 1 : 상태 만들고 조건 연결하기
캐릭터의 점프를 구현하기 위해선 AnimGraph 의 State Machine 인 Locomotion 에서 수정을 해줄 것 이다.
기본적으로, 캐릭터의 Animation Blueprint 파일에서 시작한다고 가정할 것이다.
Locomotion을 더블 클릭하여 들어가 보면 기존에 이동을 구현했던 Movement 상태가 존재한다.
이동 중에 캐릭터가 점프를 할 것이므로, movement에서 화살표를 뻗어 새로운 상태를 만들어 줄 필요가 있다.
사이드바에 Asset Browser 메뉴에서 Jump를 검색하여 점프 애니메이션을 가져온다.
여기서 Start, Apex(공중에 있는 동작), Recovery(착륙하는 동작) 세가지를 가져올 건데,
애니메이션 에셋의 이름은 에셋에 따라 다양하게 다를 것이지만, 어느정도 비슷한 네이밍을 가지고 있을 것이고
잘 모르겠으면 애니메이션을 열어보면 어떤 동작인지 볼 수 있다.
애니메이션을 드래그 앤 드롭 해서 그래프에다 가져다 놓으면 이런 형태가 만들어진다.
여기서 우리는 각 상태들을 조건에 맞춰 연결 시켜주어야 한다.
논리적으로 이런 흐름을 가질 것이기에, 위와 같이 연결한 후에 각 화살표마다 조건을 수정해 줄 것이다.
첫 번째로 Movement -> Start 로 가는 1번 화살표를 더블 클릭한다.
먼저, 변수 창에서 캐릭터가 공중에 있는지를 검사할 IsInAir 변수를 Boolean으로 만들어준다.
그리고 1~4번까지의 조건을 다음과 같이 설정해준다.
2번과 3번을 설명하자면,
2번의 Time Remaining(ratio)(애니메이션 이름) 은 "애니메이션 이름"이 재생되고 남은 재생시간의 '비율'을 의미한다.
따라서 2번의 경우에는 Jump_Start 애니메이션의 남은 재생시간 비율이 10%보다 작다면 다음 Transition으로 갈 수 있다는 것이다. 박스 안에 0.1 값은 원하는 비율에 맞게 자연스러운 애니메이션이 나오도록 수정하면 된다.
' < ' 함수의 경우 마우스 우클릭을 하고 '<' 나 'less' 를 검색하면 찾을 수 있다.
3번의 경우는 Not bool 함수이다. IsInAir 변수가 "공중에 있니?"를 묻는 변수이므로, Not 을 붙여 'IsInAir 가 False이면' 다음 Transition을 실행해라 이다. Not bool 을 검색하면 찾을 수 있다.
STEP 2 : 변수 설정하기
이제, 이벤트 그래프로 들어가준다.
각자의 이동 구현에 따라 이미 구현된 무언가가 있을텐데, 만약 없다면
Try Get Pawn Owner 를 만들어주고 시작하면 된다.
Try Get Pawn Owner 를 다음 두개의 함수와 연결 시키고,
마지막으로, 아까 정한 변수인 IsInAir를 Return Value에 맞게 설정하도록 Set IsInAir함수를 연결해 주면 된다.
IsFalling함수는 내부 기본 Character 스크립트에서 캐릭터가 공중에 있는지를 판단하여 true false를 뱉어주는 함수다.
이 Set 은 결론적으로 Event Blueprint Update Animation에 연결되면 된다.
이렇게 까지 하고, 컴파일 후 실행 시켜보면 캐릭터 점프 동작이 되긴 하지만 조금 이상할 것이다.
STEP 3 : 애니메이션 루프 끄기
다시 이 화면으로 돌아가서 이번에는 각 상태들을 더블클릭 해주면,
이런 화면이 된다. 여기에는 각각의 애니메이션이 연결되어있는데
이 애니메이션을 선택한 후, 오른쪽 Detail 창을 보면
Loop Animation (애니메이션 반복)이 체크되어 있을 것이다.
이 부분을 사진처럼 체크해제 해주면 된다.
모든 애니메이션에 들어가 똑같이 Loop를 해제해주고 실행시키면 처음 움짤처럼 점프가 잘 될 것이다.
단, 애니메이션의 동작에 따라서 공중에 있는 애니메이션의 경우
위치의 변화없이 매 프레임마다 같은 동작을 반복한다면 (ex, 낙하하면서 팔을 일정하게 휘적이는 경우, 낙하 중 정지 한 것 처럼 보이는 정지상태 애니메이션) 이런 애니메이션은 Loop를 필요에 따라 체크해야한다.
'언리얼5 & C++' 카테고리의 다른 글
[Unreal 5, C++ & Blueprint] 적 AI 생성하기 : 1 (0) | 2022.06.28 |
---|---|
[Unreal 5, C++] 캐릭터 사망 & 애니메이션 : C++ 변수, 함수를 블루프린트에서 사용하기 (0) | 2022.06.28 |
[Unreal 5, C++] 언리얼5 C++ 로그 찍는법 (0) | 2022.06.18 |
[Unreal 5, C++] 언리얼 C++에서 변수를 에디터에 보이게 하는법 / C++ 변수 블루프린트에서 호출하기 : UPROPERTY, UFUNCTION (2) | 2022.06.18 |
[Unreal, C++] 3인칭 슈팅게임 연습 일지 - 2 : 사격, 이펙트 구현 (0) | 2022.06.18 |