본문 바로가기
Unreal

[UE4 입문] 애니메이션

by imagineer_jinny 2022. 6. 21.

본 내용은 [Rookiss - 언리얼 엔진4 입문(C++ 기반)] 강의를 토대로 작성하였습니다.

 

 

애니메이션 기초

 

애니메이션 전용 블루프린트가 있다

마우스 우클릭 -> 애니메이션 -> 애니메이션 블루 프린트

 

언리얼 엔진 실행 순서

입력 시스템 호출 -> 콘텐츠 로직 실행 -> Animation Instance

 

 

스테이트 머신

애니메이션을 if, else 등으로 관리하는 것 보다 상태로 관리하는 것이 더 깔끔함.

스테이트 머신은 상태들을 모아놓은 것

어떤 애니메이션을 틀지 결정하는 자판기 같은 역할

스테이트 머신같은 경우는 애니메이션 블루프린트를 쓰는 것이 일반적

 

스페이스 누르면 점프하는 기능 추가

MyCharacter.cpp

 

애니메이션 몽타주

 

* 흐름 위주로 익히기

 

에셋 생성 -> 애님 몽타주 -> 새폴더 -> Animations 폴더 만든 후 확인

 

입력 값 세팅 후

 

C++ 클래스의 MyCharacter.cpp가서 연동해주기

MyCharacter.cpp

Attack은 기본 함수가 아니라서 따로 만들어줘야 함

 

MyCharacter.h 가서 선언 먼저 해주고

 

MyCharacter.cpp에서 구현부 만들어주기

근데 애니메이션은 MyAnimInstance에서 몰빵해서 만들어줬었음.

근데 Attack 함수 같은 경우는 왼 클릭을 누르는 순간 Attack이 호출이 되고 그 때 바로 발동시켜주는 것이다 보니 거꾸로 AMyCharacter::Attack쪽에서 Instance 접근해서 호출 해주는 게 나을 것 같다 

 

우선 MyAnimInstance에서 필요한 것들 만들어주기

MyAnimInstance.h
MyAnimInstance.cpp
MyCharacter.cpp

 

마지막으로 스테이트 머신과 최종 애니메이션 사이에 DefaultSlot 추가

 

* 정리 *

애니메이션 메쉬에서 시작해서 애니메이션 몽타주 만들기로 간 후

합치고 싶은 애니메이션 추가 후

코드에서 키가 눌려졌을 때 호출할 수 있도록 AnimInstance에 코드 연동 후 

애니메이션을 관리하고 있는 AnimGraph에서 DefaultSlot으로 흐름 가로채도록 설정

Slot은 여러개로 구분할 수 있음

 

 

델레게이트

 

지금까지는 Attack함수를 호출할 때(마우스 클릭 할 때 마다) AnimInstance -> PlayAttackMontage가 호출됨

근데 Montage가 Playing 되고 있는 상태였다면 PlayAttackMontage까지 들어올 필요가 없었을 것임.

지금 상태는 이게 끝났는지 모르니까 계속 들어와서 함수를 호출하게 됨

 

이걸 개선한다면 

MyCharacter쪽에서도 공격이 끝났는지를 따로 관리하면 좋을 것 같음

 

MyCharacter.h

IsAttacking이 처음엔 false였다가 true로 켜줬다 꺼줬다 하는 것을 만들어보자.

MyCharacter.cpp

그럼 IsAttacking은 언제 어디서 false로 꺼주나?

 

이럴 때 유용한 것!

델레게이트 : 어떤 행동이 끝났을 때 무엇을 호출해달라고 연동시켜주는 것

 

 

 

애니메이션 노티파이

 애니메이션 시퀀스 도중의 특정 지점에 이벤트가 발생하도록 구성

MyAnimInstance.h
MyAnimInstance.cpp

 

 

 

블랜드 스페이스

 

우클릭 -> 애니메이션 -> 블랜드 스페이스

애니메이션을 섞는다

 

 

댓글