애니메이션 블루프린트를 만들기에 앞서 마켓플레이스에서 에픽게임즈가 무료로 제공하는 파라곤: 신비 에셋을 프로젝트에 추가한 후 메시를 신비로 바꾸겠습니다.
만약 다른 애니메이션 FBX를 추가하신다고 할때는 Import Mesh 체크박스를 풀고 Skeleton은 기존 모델링으로 선택해준 후 모두 임포트 하시면 됩니다.
콘텐츠 브라우저에서 Animation폴더에 있는 애니메이션을 누르면 이런 식으로 애니메이션을 확인 할 수 있습니다.
콘텐츠 브라우저에서 우클릭을 해보면 고급 에셋 생성중 애니메이션 -> 애니메이션 블루프린트를 누릅니다.
생성 전 부모클래스와 스켈레톤을 선택해주어야 합니다. 애니메이션 블루프린트가 기존에 제작된 게 있으면 부모클래스로 받아 더 확장할 수가 있습니다. 어떤 다른 캐릭터들의 공통적인 블루프린트를 만든 후 확장될 캐릭터들은 상속을 받아서 제작할 수 있습니다.
현재는 선택할게 없으니 선택하지 않고 스켈레톤만 Shinbi_Skeleton을 선택하겠습니다.
애니메이션 블루프린트가 생성된 모습입니다.
더블클릭해서 열어봅니다.
이런식으로 이벤트그래프와 애님그래프, 에셋브라우저가 나오는데 이벤트 그래프에선 기능들을 추가할 수가 있고 애님그래프에서 애니메이션 시퀀스를 추가할 수 있습니다. 에셋 브라우저에는 같은 스켈레톤을 쓰는 애니메이션들이 나와있습니다.
에셋 브라우저에서 Idle을 입력해 끌어 넣고 Output Pose에 넣습니다. 컴파일하시면 바로 애니메이션을 확인할 수 있습니다.
그 이후 캐릭터 블루프린트로 돌아와 메시 컴포넌트를 선택 후 디테일창에서 Animation에 Anim Class를 AnimBP_Character로 설정합니다. 그리고 컴파일 -> 플레이를 하면 정상적으로 애니메이션이 붙은 것을 확인할 수 있습니다.
다시 캐릭터 이벤트 그래프로 돌아옵니다.
Character의 이름을 BP_Character로 변경하였습니다.
변수에서 + 버튼을 눌러 Float형 MoveForward와 Float형 MoveRight를 만듭니다.
변수이름 좌측에 아이콘을 눌러 플로트형으로 변경할수 있습니다.
만약 오른쪽에 눈표시가 감겨있다면 눈표시를 눌러서 켜주어야합니다.(외부에서 접근할 수 있게 만듭니다.)
그리고 변수를 이벤트그래프로 드래그하여 Set을 눌러준 후 Foward와 Right를 연결해줍니다.
이제 애니메이션 블루프린트에서 움직이고 있는지 값을 전달받아 확인할 수 있습니다.
변수를 MoveForward와 MoveRight를 플로트형으로 추가합니다.
그 이후 isValid와 TryGetPawnOwner을 연결해 현재 이 스켈레톤을 사용하는 폰을 찾고 그 폰이 존재한다면 통과할 수 있도록 조사합니다.
그 이후 BP_Character을 형변환하여 BP_Character의 MoveFoward와 MoveRight를 애니메이터 블루프린트에 있는 MoveFoward와 MoveRight를 드래그하여 Set으로 넣어줍니다.
캐릭터 블루프린트의 값을 바로 쓰지않고 애니메이션 블루프린트에서 값을 새로 만들어 넣는 이유는 언리얼 엔진이 애니메이션 블루프린트와 캐릭터의 블루프린트는 서로 다른 쓰레드에서 돌리기 때문에 동기화 문제가 발생할 수도 있기 때문입니다.
그리고 애님 그래프를 다시 열어서 애니메이션 Jog_Bwd, Jog_Fwd를 드래그하여 넣습니다.
그 후 블렌드를 생성하고 A에 Idle B에 Fawrd 를 넣고 Alpha에는 MoveFoward 값을 넣어줍니다.
컴파일, 실행을 하면 애니메이션이 나오는 것을 확인 할 수 있습니다.
하지만 그래프가 너무 복잡합니다.
블랜드 스페이스 1D를 사용해보겠습니다.
콘텐츠 브라우저에서 오른쪽 클릭을 하여 블랜드 스페이스 1D를 추가합니다.
신비 스켈레톤을 선택합니다.
Axis Setting에서 MoveForward로 이름을 바꾸고 최대최솟값을 -1.0, 1.0으로 설정합니다.
그리고 Bwd, Idle, Fwd모션을 드래그하여 넣습니다.
다시 애님 그래프로와서 전부 지운 후 Moveforwd와 Jog_Motion을 넣어준 후 컴파일 합니다.
실행 해보면 앞 뒤로 애니메이션이 변경되는 것을 확인할 수 있습니다.
위와 같은 방법으로 좌우도 애니메이션을 연결하면 되겠습니다.
그 다음은 상태머신을 이용해보겠습니다.
애님 그래프를 전부 지워 준후 상태머신을 추가합니다.
그 이후 더블클릭으로 상태머신을 들어가줍니다.
엔트리의 화살표를 잡아 당겨서 있어야할 State들을 추가합니다.
이런식으로 서로 연결을 다 해줍니다.
상태들을 더블클릭하여 맞는 애니메이션들을 연결해줍니다.
그 이후 상태별로 가르키는 화살표를 더블클릭하여 조건을 만듭니다.
idle -> Forward는 MoveForward가 0보다 높아야하니 추가해줍니다.
Forward -> idle로 돌아오는 건 이런식으로 둘다 0이 되면으로 해줍니다.
같은 조건을 사용하는 식은 공유 트랜지션으로 추가해서 Idle로 돌아와야하는 상황은 전부 똑같음으로 공유를 사용해줍니다.
앞에서 왼쪽으로 가는 모션 같은 경우는 대각선을 누르고 있을때 무조건 Fwd 모션이 우선이도록 MoveForward가 1이 아닐때만 변경 되도록 합니다.
왼쪽 혹은 오른쪽일 때는 MoveForward가 무조건 1이면 변경되게 만들어줍니다.
이 작업을 전부 해주면 상하좌우 이동시 애니메이션이 정상적으로 출력됩니다.
스타트 모션을 출력되게 해봅시다.
BeginPlay 이벤트를 만들고 Montage Play를 추가하여 LevelStartMontage를 추가해줍니다.
그 이후 스테이트 머신에 Upper Body슬롯을 추가해줍니다.
Upper Body 슬롯은 몽타주에 있습니다. 에셋에서 UpperBody로 되있기 때문에 UpperBody를 썼습니다.
컴파일 후 실행해보면 최초 시작 시 LevelStart모션을 실행합니다.
'Programming > 언리얼엔진' 카테고리의 다른 글
언리얼 엔진 소켓 (0) | 2020.07.22 |
---|---|
언리얼 엔진 노티파이 (0) | 2020.07.22 |
#01) 언리얼엔진 캐릭터,이동 만들어보기 (0) | 2020.07.20 |
언리얼 액터 제작,배치하기 (0) | 2020.07.20 |
언리얼 엔진 카메라, 라이트 파일럿 기능 (0) | 2020.07.20 |