본문 바로가기

언리얼 BluePrint 정리

06/01 학습 정리( 8Way Move Animation, Calculate Direction)

무기 종류에 따라 애니메이션 전환, 8방향 이동 애니메이션 구현

 

우선 무기 종류에 따라 애니메이션을 재생할 것이니 무기 타입을 변수화 시켜 이벤트 그래프에 Switch마냥 들어오는 값에 따라 재생되게 만들자.

 

  1. 현재 무기는 BP_Weapon으로 밖에 표현이 안되니 WeaponType으로 Enum을 만들어서 보관한다.(None, 무기1, 무기2...)
  2. ABP의 AnimGraph에서 사용할수 있게 EWeaponType 변수 생성
  3. 인터페이스에서 SetWeaponType을 만들어 입력에 EWeaponType 설정 (인터페이스는 애니메이션 인터페이스를 따로 만드는 편이 추후 추가/삭제가 용이하다)
  4. WeaponType의 값이 설정되는 부분은 장착/해제 이벤트니 BP_Character에서 SetWeaponType 인터페이스를 추가한다.

5. ABP의 AnimGraph에서 SetWeaponType 인터페이스 이벤트 실행 후 받아온 WeaponType을 Set으로 변수에 값을 세팅한다.

6. Blend Space로 8Way Animation을 만든다.

 

블렌드 스페이스( Blend Space )

 

블렌드 스페이스는 예전에 사용해본 Blend Space 1D의 확장형이라고 보면 된다. 이전엔 캐릭터의 Speed값에 따라 Idle, Walk, Run애니메이션의 블렌드를 해주었는데 Blend Space에서는 2개의 변수가 사용가능하다.

 

일반적으로 판매되는 애셋들을 열어보면 똑같은 Walk동작인데 F,FL,FR,L,R,B,BL,BR로 나뉘어 있는걸 보았을 것이다.

이것은 캐릭터가 보는 정면을 기준으로 어느 방향으로 이동했는지에 따라 애니메이션을 나누어, 보다 자연스러운 움직임을 구현하는 것이다. 그래서 8방향 움직임을 구현하려면 Speed와 Direction 두 개의 변수가 필요하다.

Direction의 범위는 0~360가 아니라 계산하기 더 편한 -180~180도로 설정한다.

Speed의 값이 0일때는 방향이 어디든 Idle상태, Speed가 올라 갔을때는 방향에 맞게 애니메이션을 설정한다.

프로그래밍에서 [a,b] : 폐구간 a이상 b이하, (a, b) : 개구간 a초과 b미만을 의미

 

7.블렌드 스페이스에는 Direction을 설정했으니 Direction 변수를 구현한다.

두 벡터 사이값을 계산하는 복잡한 계산법이 있지만 언리얼은 이미 그 계산법을 노드로 만들어 놓았기 때문에 그냥 사용하면된다. (벡터 계산법은 수능 이후로 머리속에서 지워졌기 때문에 생략, 나중에 알아보자)

 

Calculate Direction

액터의 회전값과 속도를 가져와 Calculate Direction 노드로 계산하여 Direction 변수에 설정해준다.

 

8. Blend Poses(E_WeaponType)을 사용하여 WeaponType에 따라 애니메이션을 재생 시킨다.

Blend Poses는 열거형 뿐만 아니라 Boolean, Int 등 다른 변수에서도 사용가능하다.

블렌드 포즈의 입력핀을 추가하여 내가 원하는 무기 종류에 맞게 애니메이션을 넣어주면 된다. 

BS_Sword 노드의 변수는 디테일의 Coordinates에서 설정했기 때문에 BS_Unarmed와 동일한 상태

9.BP_Player의 Use Controller Desired Rotation을 체크하여 카메라와 캐릭터의 시점을 일치시켜 구르는 모션등 움직이고 난뒤 카메라의 시점으로 돌아오게 만든다 Rotation Rate를 늘려 천천히 얼굴을 돌려 자연스러움을 연출한다.

(아직 이쪽관련의 Detail 설정들은 헷갈린다. 나중에 알아보자)