본 내용은 [Rookiss - 언리얼 엔진4 입문(C++ 기반)] 강의를 토대로 작성하였습니다.
애니메이션 기초
애니메이션 전용 블루프린트가 있다
마우스 우클릭 -> 애니메이션 -> 애니메이션 블루 프린트
언리얼 엔진 실행 순서
입력 시스템 호출 -> 콘텐츠 로직 실행 -> Animation Instance
스테이트 머신
애니메이션을 if, else 등으로 관리하는 것 보다 상태로 관리하는 것이 더 깔끔함.
스테이트 머신은 상태들을 모아놓은 것
어떤 애니메이션을 틀지 결정하는 자판기 같은 역할
스테이트 머신같은 경우는 애니메이션 블루프린트를 쓰는 것이 일반적
스페이스 누르면 점프하는 기능 추가
애니메이션 몽타주
* 흐름 위주로 익히기
에셋 생성 -> 애님 몽타주 -> 새폴더 -> Animations 폴더 만든 후 확인
입력 값 세팅 후
C++ 클래스의 MyCharacter.cpp가서 연동해주기
Attack은 기본 함수가 아니라서 따로 만들어줘야 함
MyCharacter.h 가서 선언 먼저 해주고
MyCharacter.cpp에서 구현부 만들어주기
근데 애니메이션은 MyAnimInstance에서 몰빵해서 만들어줬었음.
근데 Attack 함수 같은 경우는 왼 클릭을 누르는 순간 Attack이 호출이 되고 그 때 바로 발동시켜주는 것이다 보니 거꾸로 AMyCharacter::Attack쪽에서 Instance 접근해서 호출 해주는 게 나을 것 같다
우선 MyAnimInstance에서 필요한 것들 만들어주기
마지막으로 스테이트 머신과 최종 애니메이션 사이에 DefaultSlot 추가
* 정리 *
애니메이션 메쉬에서 시작해서 애니메이션 몽타주 만들기로 간 후
합치고 싶은 애니메이션 추가 후
코드에서 키가 눌려졌을 때 호출할 수 있도록 AnimInstance에 코드 연동 후
애니메이션을 관리하고 있는 AnimGraph에서 DefaultSlot으로 흐름 가로채도록 설정
Slot은 여러개로 구분할 수 있음
델레게이트
지금까지는 Attack함수를 호출할 때(마우스 클릭 할 때 마다) AnimInstance -> PlayAttackMontage가 호출됨
근데 Montage가 Playing 되고 있는 상태였다면 PlayAttackMontage까지 들어올 필요가 없었을 것임.
지금 상태는 이게 끝났는지 모르니까 계속 들어와서 함수를 호출하게 됨
이걸 개선한다면
MyCharacter쪽에서도 공격이 끝났는지를 따로 관리하면 좋을 것 같음
IsAttacking이 처음엔 false였다가 true로 켜줬다 꺼줬다 하는 것을 만들어보자.
그럼 IsAttacking은 언제 어디서 false로 꺼주나?
이럴 때 유용한 것!
델레게이트 : 어떤 행동이 끝났을 때 무엇을 호출해달라고 연동시켜주는 것
애니메이션 노티파이
애니메이션 시퀀스 도중의 특정 지점에 이벤트가 발생하도록 구성
블랜드 스페이스
우클릭 -> 애니메이션 -> 블랜드 스페이스
애니메이션을 섞는다
'Unreal' 카테고리의 다른 글
[UE4 입문] 인공지능 (0) | 2022.07.13 |
---|---|
[UE4 입문] 충돌과 UI (0) | 2022.07.05 |
[UE4 입문] 언리얼 엔진 기초 (0) | 2022.06.20 |
CoreMinimal.h에 포함되지 않은 컴포넌트 에러 처리 (0) | 2022.06.15 |
[UE4 입문] 환경 설정 (git, gitignore) (0) | 2022.05.18 |
댓글