[박치영] Gruntling Enemy Behavior Tree 수정

main
pcyoung 2023-12-14 12:46:52 +09:00
parent 1909cc39cb
commit 390c1c84a9
4 changed files with 76 additions and 2 deletions

View File

@ -0,0 +1,44 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "AI/BehaviorTreeNodes/T_TryGetRandomPatrolPoint.h"
#include "AIController.h"
#include "NavigationData.h"
#include "NavigationSystem.h"
#include "BehaviorTree/BlackboardComponent.h"
UT_TryGetRandomPatrolPoint::UT_TryGetRandomPatrolPoint()
{
Radius = 500.f;
QueryExtent = {300.f, 300.f, 300.f};
}
EBTNodeResult::Type UT_TryGetRandomPatrolPoint::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
{
EBTNodeResult::Type result = Super::ExecuteTask(OwnerComp, NodeMemory);
if(result == EBTNodeResult::Failed)
return EBTNodeResult::Failed;
APawn* ControllingPawn = OwnerComp.GetAIOwner()->GetPawn();
if(ControllingPawn == nullptr)
return EBTNodeResult::Failed;
UNavigationSystemV1* NavSystem = UNavigationSystemV1::GetNavigationSystem(ControllingPawn->GetWorld());
if(NavSystem == nullptr)
return EBTNodeResult::Failed;
FVector CurLocation = ControllingPawn->GetActorLocation();
FNavLocation RandomLocation, ProjectLocation;
if(NavSystem->GetRandomReachablePointInRadius(CurLocation, Radius, RandomLocation))
{
if(NavSystem->ProjectPointToNavigation(RandomLocation.Location, ProjectLocation, QueryExtent))
OwnerComp.GetBlackboardComponent()->SetValueAsVector(BlackboardKey_TargetLocation.SelectedKeyName, ProjectLocation.Location);
else
return EBTNodeResult::Failed;
}
else
return EBTNodeResult::Failed;
return EBTNodeResult::Succeeded;
}

View File

@ -0,0 +1,30 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "BehaviorTree/BTTaskNode.h"
#include "T_TryGetRandomPatrolPoint.generated.h"
/**
*
*/
UCLASS()
class D1_API UT_TryGetRandomPatrolPoint : public UBTTaskNode
{
GENERATED_BODY()
public:
UT_TryGetRandomPatrolPoint();
public:
virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
private:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="BlackBoard", meta=(AllowPrivateAccess="true"))
FBlackboardKeySelector BlackboardKey_TargetLocation;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="BlackBoard", meta=(AllowPrivateAccess="true"))
float Radius;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="BlackBoard", meta=(AllowPrivateAccess="true"))
FVector QueryExtent;
};

View File

@ -61,8 +61,8 @@ void AGruntlingEnemy::BeginPlay()
HealthBarComponent->SetWidget(HealthBarRef);
}
if(IsValid(IntroAnimMontage))
PlayAnimMontage(IntroAnimMontage);
//if(IsValid(IntroAnimMontage)) //Intro가 필요하지 않음. 필요할 경우 주석해제
// PlayAnimMontage(IntroAnimMontage);
}
void AGruntlingEnemy::OnTargeted(bool bIsTargeted)