Death 모션 추가 및 공격 패턴 증가

최기승·2024년 3월 12일
0

공격 패턴 증가

총 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문을 사용하여 패턴을 정합니다.


Death 모션 추가

캐릭터와 적AI의 Death 모션을 추가하였습니다.


캐릭터 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);
}

죽었을 시 움직임을 멈추고 죽는 애님몽타주를 실행시켰습니다.


적 Death 모션


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초가 지나면 월드에서 사라지게 만들었습니다.

profile
발전하는 개발자를 꿈꾸는 프로그래머

0개의 댓글

관련 채용 정보