728x90
반응형
Enemy 작업을 해주었다. Enemy가 플레이어에게 공격당했을 경우, Enemy 본인의 HP가 깎이면서 다른 애니메이션을 플레이할 수 있도록 작업한 것. 기본 상태머신은 Tick으로 진행되기 때문에 Montage가 실행되는 곳은 Tick이 실행되지 않는 함수 안에서 플레이 될 수 있도록 해야한다.
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
반응형
'언리얼엔진 개발 > Animation' 카테고리의 다른 글
[UnrealEngine5] 애니메이션 구성하는 방법(1) Blend Space (0) | 2023.04.30 |
---|