728x90
반응형
애니메이션 몽타주에서 위와같이 노티파이를 추가할 수 있다.
이렇게 특정 타이밍에 노티파이를 추가하면, 해당 애니메이션 타이밍에 사운드 출력 등 특별한 처리를 할 수 있다.
UFUNCTION()
void AnimNotify_AttackHit();
AnimInstance 헤더에 위처럼 노티파이 함수를 선언하고
void UMyAnimInstance::AnimNotify_AttackHit()
{
UE_LOG(LogTemp, Log, TEXT("AnimNotify_AttackHit"));
}
AnimInstance cpp파일에 노티파이 함수를 정의하면, 노티파이가 추가면 애니메이션 타이밍에 함수가 실행된다.
이번에는 몽타주 섹션에 대해 알아보자.
위 그림처럼 우클릭을 통해 새 몽타주 색션을 생성하고, Attack0, Attack1, Attack2와 같이 위치를 설정할 수 있다.
오른쪽 몽타주 섹션 창을 보면 세 색션이 연결되어있는데, 화살표를 클릭해서 연결을 제거하면
이렇게 몽타주 섹션의 링크가 제거되고 하나의 애니메이션 색션 부분만 재생된다.
이렇게 분리한 섹션을 이용해서 한 번 클릭마다 하나의 섹션, 다음 클릭에 그 다음 섹션이 실행되도록 해보자.
public:
UMyAnimInstance();
virtual void NativeUpdateAnimation(float DeltaSeconds) override;
void PlayAttackMontage();
// 다음 섹션으로 넘어감
void JumpToSection(int32 SectionIndex);
// AttackMontage의 이름을 가져옴
FName GetAttackMontageName(int32 SectionIndex);
AnimInstance 헤더에 다음 섹션으로 넘어가는 함수와 Montage의 이름을 가져오는 함수를 선언한다.
FName의 언리얼의 Name Type이다.
void UMyAnimInstance::JumpToSection(int32 SectionIndex)
{
FName Name = GetAttackMontageName(SectionIndex);
Montage_JumpToSection(Name, AttackMontage);
}
FName UMyAnimInstance::GetAttackMontageName(int32 SectionIndex)
{
return FName(*FString::Printf(TEXT("Attack%d"), SectionIndex));
}
AnimInstance cpp에 선언한 함수들을 정의한다.
void AMyCharacter::Attack()
{
if (IsAttacking)
return;
AnimInstance->PlayAttackMontage();
AnimInstance->JumpToSection(AttackIndex);
AttackIndex = (AttackIndex + 1) % 3;
IsAttacking = true;
}
적용하기 위해 Character cpp파일에서 Attack을 할 때, JumpToSection 함수를 실행하고, 함수 실행마다 AttackIndex라는 섹션 인덱스를 0~2까지 증가시킨다.
728x90
반응형
'개발 · 컴퓨터공학' 카테고리의 다른 글
Learning Unreal 4 언리얼 공부일지 - 충돌 감지 해보기 (0) | 2022.01.27 |
---|---|
Learning Unreal 4 언리얼 공부일지 - 블렌드 스페이스가 뭐지 (0) | 2022.01.26 |
Learning Unreal 4 언리얼 공부일지 - 언리얼의 delegate (0) | 2022.01.24 |
Learning Unreal 4 언리얼 공부일지 - 애니메이션 몽타주가 뭐야 (0) | 2022.01.23 |
Learning Unreal 4 언리얼 공부일지 - 애니메이션 적용하기 (0) | 2022.01.22 |