이득우의 언리얼 C++ 게임 개발의 정석
언리얼 엔진의 애님 그래프에서는 상태 머신을 이용해 애니메이션을 관리할 수 있다.
하나의 상태를 스테이트(State)라고 하고 다른 상태로 이동하기 위한 조건을 트랜지션(Transition) 또는 룰(Rule)이라고 한다.
Add New State Machine을 클릭해 새로운 상태 머신을 추가할 수 있다.
점프의 경우 체공 시간이 얼마나 걸릴지 예측할 수 없기 때문에 점프 시작, 점프 중, 점프 끝으로 나누어야 한다.
상태를 선택해 애니메이션을 설정할 수 있고, 트랜지션의 둥근 버튼을 눌러 조건을 설정할 수 있다.
좌측의 Animation Graphs 창에서 상태와 조건으로 빠르게 이동할 수 있다.
Character 클래스에는 점프를 위한 Jump() 멤버 함수가 이미 구현되어 있다.
- Character Movement 컴포넌트의 JumpZVelocity를 변경해 점프 높이를 조절할 수 있다.
애니메이션 블루프린트에서 참조할 수 있도록 점프 중인지를 저장하는 IsInAir 변수를 애님 인스턴스에 만든다.
Pawn Movement 컴포넌트에는 다음 네 가지 질의 함수가 설계되어 있지만, 실제로 이 기능이 제대로 구현된 컴포넌트는 Character Movement 컴포넌트뿐이다.
- IsFalling(): 체공 중인지 여부
- IsSwimmnig(): 수영 중인지 여부
- IsCrouching(): 쭈그리기 중인지 여부
- IsMoveOnGround(): 땅에서 이동 중인지 여부
Floating Pawn Movement 컴포넌트 등에서 모든 함수는 false를 반환한다.
이동 시에만 뛰는 애니메이션을 재생하고 멈춰있을 땐 아이들 상태로 대기한다.
각 점프 상황에 리타겟한 애니메이션을 설정해준다.
땅 -> 점프 시작 상태로의 전환 조건이다.
점프 시작 -> 점프 중 상태로의 전환 조건이다.
Time Remaining (ratio) 노드를 이용해 WarriorJump_Start 애니메이션이 90% 이상 재생되었으면 전환한다.
- 트랜지션에서는 연결된 스테이트에서 사용하는 애니메이션 관련 노드를 사용할 수 있다.
중 -> 점프 종료 상태로의 전환 조건이다.
점프 종료 -> 땅 상태로의 전환 조건이다.
WarriorJump_End 애니메이션이 90% 이상 재생되었으면 전환한다.
이번처럼 애니메이션 재생을 완료하고 스테이트를 이동하는 경우 트랜지션의 로직을 구현하지 않아도 된다.
단순히 Automatic Rule Based on Sequence Player in State 옵션을 활성화 해주면 애니메이션 종료시 자동으로 스테이트가 전환된다.
'Unreal Engine > 이득우의 언리얼 C++ 게임 개발의 정석' 카테고리의 다른 글
델리게이트(Delegate) (0) | 2023.03.07 |
---|---|
애니메이션 몽타주 (0) | 2023.03.07 |
애니메이션 리타겟 (0) | 2023.03.06 |
애님 인스턴스(Anim Instance) (0) | 2023.03.06 |
회전 관련 옵션들 (0) | 2023.03.05 |