본문 바로가기

Unreal5/TPS 캐릭터 만들기

TPS 캐릭터 만들기 - 회피

*언리얼엔진5를 배우는 과정을 기록하는 포스팅입니다.
아직 미숙하고 처음 글을 작성하는 만큼 미흡한 부분이 많은데 댓글로 피드백 부탁드립니다! 감사합니다.

.

*현재 강의자료를 토대로 생성하는 캐릭터는 이후 TPS 슈팅 게임에 적용할 캐릭터의 프로토 타입으로 만들고있습니다. 

강의를 기반으로 약간의 수치 및 로직 수정이 있을 수 있습니다.

 

강의자료:

https://www.youtube.com/watch?v=eCDwYVM9Dhw&t=126s 

 

실행 이미지)

 

왼) x1.0 배속 // 오) x1.5배속

메모)

 

IA_Move에서 앞뒤에 대한 이동 인풋값과 좌우에 대한 이동 인풋값을 저장하는 변수를 만들고,

*후에 V키가 아닌 W/A/S/D를 더블클릭 할 시에 이어지도록 Enhanced Input 시스템을 활용할 예정

* 여기서 M이라고 적힌 노드는 매크로 인데,

언리얼엔진 공식 문서 - https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Blueprints/BestPractices/

대략적으로 이해한 바로는,

함수와 매크로 둘다 기능적으로는 유사하지만,

매크로는 그래프노드를 복사해 그대로 붙여넣는 반면, 함수는 정말 실행되는 로직의 묶음이라고 보는게 맞는것 같다.

그대로 복사한다는 것에 inline 함수가 생각나긴 하지만, 이는 찾아봐야 할 것 같다.

 

둘의 차이점으로는 

매크로는 Delay, Play Montage처럼 실행하는데 일정 시간이 걸리는 노드들에 대하여도 넣을 수 있지만,

함수는 그렇지 않다.

그렇기에 설명 마지막 줄 처럼, 다른 블루프린트에서 호출할 가능성이 있거나, 자손에서 수정할 일이 있다면 함수를, 아니라면 매크로를 만들어 쓰는게 좋아보인다.

 

이제 닷지 시스템을 알아보자면,

Custom Event로 만들고, Forward Input 값과 Right Input 값을 넘겨준다.

 

Calculate Dodge 매크로 안에서는 다음과 같이 위치를 판단하여 해당 애니메이션을 Play Montage한다.

여기서 Play Montage는 

AnimGraph의 Slot 'DefaultSlot'에서 사용되는데, 그냥 간단하게 애니메이션을 덮어버리는 느낌으로 받아들이긴 했다.

Main States에서 최종적으로 사용될 애니메이션(Locomotion 및 점프 등)을 반환하는데,

만약 지금과 같이 내 플레이어가 그냥 V를 눌렀을 땐 회피를 하고, 구르는 애니메이션이 나오면 좋겠다 할 때 사용하는 방식이다.

(자세한 설명 - https://docs.unrealengine.com/4.27/ko/AnimatingObjects/SkeletalMeshAnimation/AnimMontage/UserGuide/)

 

다음으로, 매크로에 연결해줄 Animation Montage가 필요한데,

해당 영상에서 제공하는 에셋의 경우 Import 하는 과정에서 다음과 같은 오류가 발견되었다.

Animation length 1.311 is not compatible with import frame-rate 30 fps (sub frame 0.344), animation has to be frame-border aligned. Either re-export animation or enable snap to closest frame boundary import option. 

 

https://forums.unrealengine.com/t/fbx-animation-import-error/606154

 

FBX Animation Import Error

Hey so i have imported an mesh and it’s rigged and everything but it wont let me import the animations for it… It works for others to import the mesh and import the animations but wont work for me. Here is the error FBXImport: Error: Animation length 4

forums.unrealengine.com

에서 

다음과 같은 해결책을 찾아 연결해보니,

 Import 까지는 작동하였으나, 애니메이션이 정상작동 하지 않아 원본 영상의 설명에 있는 링크를 통해 프로젝트 파일을 다운받고 그 안에서 에셋을 가져왔다.

https://www.youtube.com/watch?v=azjBLWUiswA 

Migrate를 통해 에셋을 프로젝트로 옮겨준다음에,

 

애니메이션 몽타주를 만들어주고, 해당 애니메이션들을 연결해주면 된다.

 

해당 구르기를 계속 사용해보면서 느낀점이,

"사실상 로직 자체에서는 움직임을 준 적이 없고, 회전하는 애니메이션만 재생했을 뿐인데 왜 이동까지 되는거지?"

였다.

(캐릭터의 Capsule Component 의 Hidden in Game 옵션을 끄고 내 캐릭터의 위치를 파악해보기까지 하였다.)

찾아보니, 

Animation Montage에 사용되는 애니메이션인 DiveRoll_X 를 살펴보면

다음과 같이 Root Motion 이 켜져있다.

Root Motion이 아마 플레이어의 이동에까지 관여를 해주는 로직인 것 같다.

하지만 이렇게 된다면 문제점이 구르기를 할 때 항상 그 애니메이션이 제공하는 길이 만큼밖에 이동하지 못할것이다.

예상이긴 하지만, RootMotion 을 끄고, 애니메이션 자체에서 이동을 하는것이 아닌 원점 위치에서 고정되게 만들고(달리기 애니메이션 처럼) 움직임을 가하는 로직을 추가하면 이에대한 문제점이 해결될 것 같다.

(후에 리팩토링이 필요할 것 같다. 혹은 해당 dodge는 그대로 두고, 후에 LSHIFT를 누르는 만큼 게이지를 쌓아 부스트를 사용하여 대시하는 동작도 넣으려고 하는데, 이때에는 위에 절차대로 진행해볼 예정이다.)