플레이어 캐릭터 bp가 사용하는 애니메이션 블루프린트가 몇가지 변수를 세팅하고 간단한 스테이트 변환을 처리하는 법
ABP_PlayerCharacter은 BP_PlayerCharacter의 애님 클래스이다.
BP_PlayerCharacter은 현재 기본 캐릭터 메시와 기본 카메라, wasd 입력에 따른 걷기 기능을 가지고 있다.
애니메이션이 적용되어 있지 않기 때문에 입력이 없을 때에는 부자연스러운 정자세로 서 있고, 걸을 때는 정자세 상태를 유지한 채 위치만 이동한다.
아래는 캐릭터가 가만히 있을 때, 걸을 때 자연스러워 보이기 위한 애니메이션을 추가하는 방법이다.
1. 애니메이션 블루프린트(이하 ABP)를 생성하고 프리뷰 메시를 선택한다.
-프리뷰 메시는 좌측 상단에서 애니메이션 프리뷰를 보여줄 마네킹이다.
2. BP_PlayerCharacter(이하 캐릭터 BP)의 애님 클래스를 방금 생성한 ABP로 지정한다.
3. ABP이벤트그래프에 아래 노드를 추가한다.
-본 ABP를 소유하는 액터를 불러오고, 캐릭터BP로 형변환해 Player Character이라는 이름의 변수로 만든다.
-Player Character의 Character Movement component를 get해 character Movement라는 이름의 변수로 만든다.
-위 두 단계로 Player Character, Character Movement를 셋하고 원할 때마다 불러올 수 있게 된다.
Character Movement Component에 대한 이해는 공식 문서를 참고.
4. ABP의 애님그래프에 'Locomotion'이라는 State Machine을 추가하고 output pose에 연결한다.
-locomotion은 한 상태에서 다른 상태/한 장소에서 다른 장소로 이동할 수 있는 능력이나 이동을 말한다. 플레이어의 상태를 저장하는 데 쓰이는 상태 머신의 이름으로 쓰인다.
5. locomotion 내에 두 개의 state를 생성하고 각각 이름을 idle, walk라고 한다.
6. 각각의 state(상태) 내부에 해당 상태에 출력할 애니메이션을 추가하여 output 노드에 연결한다.
-빨간 노드는 하나의 애니메이션이다. 사진 속 노드는 Mf_idle이라는 애니메이션으로, 해당 노드를 output노드에 연결하면캐릭터 bp는 idle 상태에서 mf_idle 애니메이션을 출력하게 된다.
-초록 노드는 랜덤으로 애니메이션을 출력해 준다. 디테일 패널에서 애니메이션 시퀀스를 여러 개 추가하고 플레이 확률을 지정할 수 있다. 현재 이 노드가 아웃풋과 연결되어 있으므로 캐릭터 bp는 해당 노드 안의 애니메이션을 랜덤으로 플레이한다.
7. locomotion에서 idle과 walk 상태를 양 방향 모두 화살표로 연결해 준다.
-화살표 방향대로 상태가 변화할 수 있다. idle에서 walk상태로의 트랜지션, 반대의 경우 모두 가능하다.
-화살표 근처에 생성되는 동그란 아이콘을 클릭하여 트랜지션의 조건을 정할 수 있다.
8. 트랜지션 조건 찾기
-idle에서 walk로 : 플레이어 캐릭터가 이동하고 있는 경우 walk로 상태를 이행시켜주어야 한다.
-walk에서 idle로 : 플레이어 캐릭터가 이동하지 않는 경우 idle로 상태를 이행시켜주어야 한다.
따라서 플레이어 캐릭터의 속력(speed)이 0을 초과하는 경우 walk, 캐릭터의 속력이 0인 경우 idle상태라고 볼 수 있다.
9. 트랜지션 조건 세팅하기
-플레이어의 speed라는 변수는 abp의 이벤트 그래프에서 만든다.
-speed와 0의 크기비교 불리언은 상태 간의 이행 규칙 내부에서 설정한다.
즉, abp로 플레이어의 상태를 정의하고, 각 상태에 적절한 애니메이션을 배치하고, 상태간 이행을 연결하고, 이행 규칙을 정할 수 있다.
'언리얼 > 언리얼 노트' 카테고리의 다른 글
[UE5] 대쉬 기능 만들기 (0) | 2024.12.18 |
---|---|
[UE5] AI 인지 설정 (0) | 2024.08.14 |
[UE5] tps 기본설정 변경 - 카메라 방향과 플레이어 캐릭터가 보는 방향 일치시키기 (0) | 2024.07.30 |
[UE4] Unreal Learning Kit: Games 1-2강 정리 (0) | 2024.07.30 |
[언리얼5] 엔진 버전과 콘텐츠 버전이 일치하지 않는 경우 사용법 (0) | 2024.07.10 |