플레이어 캐릭터 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에 대한 이해는 공식 문서를 참고.

https://dev.epicgames.com/documentation/en-us/unreal-engine/understanding-networked-movement-in-the-character-movement-component-for-unreal-engine

 

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로 플레이어의 상태를 정의하고, 각 상태에 적절한 애니메이션을 배치하고, 상태간 이행을 연결하고, 이행 규칙을 정할 수 있다.

+ Recent posts