본문 바로가기
언리얼엔진 개발/Animation

[UnrealEngine5] 애니메이션 구성하는법(2) AnimMontage

by yeni_0224 2023. 5. 9.
728x90
반응형

Enemy 작업을 해주었다. Enemy가 플레이어에게 공격당했을 경우, Enemy 본인의 HP가 깎이면서 다른 애니메이션을 플레이할 수 있도록 작업한 것. 기본 상태머신은 Tick으로 진행되기 때문에 Montage가 실행되는 곳은 Tick이 실행되지 않는 함수 안에서 플레이 될 수 있도록 해야한다.

다른 프로젝트에서 작업한 Animation Montage 작업 화면

Montage를 생성하면 작성한 Montage의 이름을 직접적으로 호출하는 방법으로 애니메이션을 재생시킬 것이다.

FName(" ")을 사용하였다.

공격 당했을 때 : 공격 당하는 순간 이동을 멈추고 공격 당하는 Animation을 플레이시켜주었다.

state를 변경해준 후 현 state를 갱신해주는 작업까지 같이 해주었다.

void UBossFSM::OnDamageProcess(float attack)
{
	//플레이어에게 공격당하면 hp가 깎인다
	hp -= attack;
	currentTime = 0;
	ai->StopMovement();
	if (hp <= 0)
	{
		state = EBossState::DIE;
		bossAnim->animState = state;
		me->PlayAnimMontage(bossAnim->bossAnimFactory, 1, FName("Die"));
	
		bossAnim->bBossEndDie = false;
	}
	else
	{
		// 피격
		state = EBossState::DAMAGE;
		bossAnim->animState = state;
		me->PlayAnimMontage(bossAnim->bossAnimFactory, 1, FName("Damage"));
		
		//뒤로 밀리기 P = P0 + vt
		FVector p0 = me->GetActorLocation();
		float easing = 1 - pow(2, -8 * GetWorld()->GetDeltaSeconds());
		FVector vect = me->GetActorForwardVector() * -1 * GetWorld()->GetDeltaSeconds() * 170000 * easing;		
		me->SetActorLocation(p0 + vect);
	}
}

공격을 당했을 때 뒤로 살짝 밀리는 반동을 작업해주었다. 그냥 뒤로 일정한 속도로 밀리는 것이 아니라, 약간의 easing 함수를 사용해서 조금 더 느낌있게 사악 밀릴 수 있도록 해주었다.

void UCloseAttackEnemyAnim::EndDamage()
{
	me->GetCharacterMovement()->MaxWalkSpeed = me->walkSpeed;
}

공격 당한 후 다시 Enemy의 움직임을 원래상태로 되돌려주어 다시 이동할 수 있도록 해주었다.

728x90
반응형