public override void Update()
{
base.Update();
float normalizedTime = GetNormalizedTime(stateMachine.Enemy.Animator, "Attack");
if (normalizedTime < 1f)
{
if (!alreadyAppliedDealing && normalizedTime >= stateMachine.Enemy.Data.Dealing_Start_TransitionTime)
{
//stateMachine.Enemy.Weapon.SetAttack(stateMachine.Enemy.Data.Damage, stateMachine.Enemy.Data.Force);
//stateMachine.Enemy.Weapon.gameObject.SetActive(true);
alreadyAppliedDealing = true;
}
if (alreadyAppliedDealing && normalizedTime >= stateMachine.Enemy.Data.Dealing_End_TransitionTime)
{
//stateMachine.Enemy.Weapon.gameObject.SetActive(false);
}
}
else
{
if (IsInChasingRange())
{
stateMachine.ChangeState(stateMachine.ChasingState);
return;
}
else
{
stateMachine.ChangeState(stateMachine.IdleState);
return;
}
}
}
base.Update()
GetNormalizedTime
공격 애니메이션 진행 중 동작
if (normalizedTime < 1f)
- 공격 애니메이션이 아직 끝나지 않았을 때 실행되는 로직입니다.
- 무기 활성화 조건:
!alreadyAppliedDealing: 아직 데미지를 적용하지 않았고,
normalizedTime이 Dealing_Start_TransitionTime 이상일 때.
무기 비활성화 조건:
이미 데미지를 적용했으며(alreadyAppliedDealing == true),
normalizedTime이 Dealing_End_TransitionTime 이상일 때.
공격 애니메이션 종료 후 상태 전환
이 코드는 적이 공격 애니메이션 중 특정 시점에 무기를 활성화하여 데미지를 적용하고, 애니메이션이 끝난 후 다음 상태(추적 또는 대기)로 전환하도록 처리합니다. 상태 패턴과 애니메이션 진행도를 활용한 설계로, 적의 공격 로직을 애니메이션에 동기화하여 자연스럽게 작동하도록 구현된 점이 특징입니다.