Skip to content

[Jeongwon]AI_RangeAttack_1~4

Garden1298 edited this page Dec 12, 2020 · 1 revision

AI Attack

대기중인 NPC가 플레이어와 일정거리 안에 있으면 공격하게 해주었다.

image

Is Player in Attack Range

플레어어가 공격범위 안에 있는지 확인하는 BTService 노드
"IsPlayerInRangeRange.cpp"

...
   // 플레이어가 공격 범위 안에 있으면 참 반환
   cont->get_blackboard()->SetValueAsBool(bb_keys::player_is_in_range_range, 
   	(npc->GetDistanceTo(player) < range_range_large)&&
   	(npc->GetDistanceTo(player) > range_range_small));
...

NPC Rotation

npc가 플레이어를 바라보게 만드는 BTTask 노드
"RotateToPlayer.cpp"

...
   //npc 위치에서 플레이어를 바라보는 방향 구하기
   FRotator PlayerRot = UKismetMathLibrary::FindLookAtRotation(npc->GetActorLocation(), PlayerPawn->GetActorLocation());
   //npc 방향 바꾸기
   npc->SetActorRelativeRotation(PlayerRot);
...

Projectile

총알 세팅
"NPC_Projectile.cpp"

...
   // ProjectileMovementComponent 를 사용하여 이 발사체의 운동을 관장합니다.
   ProjectileMovementComponent = CreateDefaultSubobject<UProjectileMovementComponent>(TEXT("ProjectileMovementComponent"));
   ProjectileMovementComponent->SetUpdatedComponent(CollisionComponent);
   ProjectileMovementComponent->InitialSpeed = 3000.0f;
   ProjectileMovementComponent->MaxSpeed = 3000.0f;
   ProjectileMovementComponent->bRotationFollowsVelocity = true;
   ProjectileMovementComponent->bShouldBounce = true;
   ProjectileMovementComponent->Bounciness = 0.3f;
...

Spawn Projectile

총알 스폰
"NPC_ranged.cpp"

...
   // 프로젝타일 발사를 시도합니다.
   	if (ProjectileClass)
   	{
           UWorld* World = GetWorld();
           if (World)
           {
               // 총구 위치에 발사체를 스폰시킵니다.
               ANPC_Projectile* Projectile = World->SpawnActor<ANPC_Projectile>(ProjectileClass, GetMesh()->GetSocketLocation("Muzzle_01"), GetMesh()->GetSocketRotation("Muzzle_01"));
               if (Projectile)
               {
                   // 발사 방향을 알아냅니다.
                   FVector LaunchDirection = GetMesh()->GetSocketRotation("Muzzle_01").Vector();
                   Projectile->FireInDirection(LaunchDirection);
               }
           }
        }
...

GIF 2020-12-10 오후 11-52-13

Melee_Attact_Monster To Do list

상태 기능 구현 자료
스탯 "AI_HP = 15"," AI_Dmp = 10", "AI_Attack_speed = 유동적"," AI_speed = 유동적"
대기 근접 적은 지정된 장소를 대기합니다 [Jeongwon]AI_RangeAttack_1~4
추격 플레이어가 원거리 적의 추격범위 내에 진입했을 시 플레이어를 따라옵니다. [Jeongwon]AI_RangeAttack_1~4
공격 플레이어가 공격범위 내에 있는지 판단한다. 그 후 공격범위 안에 들어왔을시 공격 애니메이션을 호출한다. [Jeongwon]AI_RangeAttack_1~4
사망 사망 시 사망 애니메이션을 호출하고 애니메이션이 끝나면 지운다.