총 3가지 공격 패턴을 추가했습니다.
각각의 패턴은 1부터 3까지 정수를 랜덤하게 받아 정하게 제작하였습니다.
void ASLEnemyBearCharacter::AttackByAI()
{
UE_LOG(LogTemp, Log, TEXT("Attack Start"));
// Movement Setting
GetCharacterMovement()->SetMovementMode(EMovementMode::MOVE_None);
//Random Attack Setting
int AttackNum = FMath::RandRange(1, 3);
switch (AttackNum)
{
case 1:
ActionMontage = Action1Montage;
break;
case 2:
ActionMontage = Action2Montage;
break;
case 3:
ActionMontage = Action3Montage;
break;
}
// Animation Setting
const float AttackSpeedRate = 1.0f;
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
AnimInstance->Montage_Play(ActionMontage, AttackSpeedRate);
//Set MontageEnd Delegate
FOnMontageEnded EndDelegate;
EndDelegate.BindUObject(this, &ASLEnemyBearCharacter::ComboActionEnd);
AnimInstance->Montage_SetEndDelegate(EndDelegate, ActionMontage);
UE_LOG(LogTemp, Log, TEXT("Attack Complete"));
}
Switch문을 사용하여 패턴을 정합니다.
캐릭터와 적AI의 Death 모션을 추가하였습니다.
void ASLPlayerCharacter::SetDead()
{
GetCharacterMovement()->SetMovementMode(EMovementMode::MOVE_None);
GetCharacterMovement()->bOrientRotationToMovement = false;
CameraBoom->bUsePawnControlRotation = false;
PlayDeadAnimation();
SetActorEnableCollision(false);
}
void ASLPlayerCharacter::PlayDeadAnimation()
{
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
AnimInstance->StopAllMontages(0.0f);
AnimInstance->Montage_Play(DeadMontage, 1.0f);
}
죽었을 시 움직임을 멈추고 죽는 애님몽타주를 실행시켰습니다.
void ASLEnemyBearCharacter::SetDead()
{
// 비헤이비어 트리 멈추기
ASLBearAIController* TreeController = Cast<ASLBearAIController>(GetController());
if (TreeController)
{
TreeController->StopAI();
}
GetCharacterMovement()->SetMovementMode(EMovementMode::MOVE_None);
PlayDeadAnimation();
SetActorEnableCollision(false);
FTimerHandle DeadTimerHandle;
GetWorld()->GetTimerManager().SetTimer(DeadTimerHandle, FTimerDelegate::CreateLambda(
[&]()
{
Destroy();
}
), DeadEventDelayTime, false);
}
void ASLEnemyBearCharacter::PlayDeadAnimation()
{
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
AnimInstance->StopAllMontages(0.0f);
AnimInstance->Montage_Play(DeadMontage, 1.0f);
}
적 AI는 죽었을 시 비헤이비어 트리도 멈춰주었습니다.
죽었을 시 5초가 지나면 월드에서 사라지게 만들었습니다.