개발 · 컴퓨터공학 / / 2022. 1. 25. 18:47

Learning Unreal 4 언리얼 공부일지 - 애니메이션 노티파이

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
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유