1. Task 클래스 생성

  • UI 에서 표현할 떄는 BTTask_ 접두사 부분이 자동으로 걸러진다
  • BTTask_FindPatrolPos 클래스 생성

행동동트리는 태스크를 실행할때, ExecuteTask라는 멤버 함수를 실행하고, 함수는 다음의 셋중 하나의 값을 반환한다

Aborted : 태스크 실행 중에 준단됐다. 결과적으로 실패 
Failed : 태스크를 수행했지만 실패 
Succeeded : 태스크를 성공적으로 수행 
InProgress : 대스크를 계속 수행하고 있다. 태크스의 실행 결과는 향후 얄려줌

그래서 ExeCuteTask 함수에서 다음 정찰 지점을 찾는 로직을 구현하고 바로 실행 결과를 반환라도록 구현한다.
태스크의 이름을 다른 이름으로 표시하고 싶다면 NodeName속성을 다른값으로 지정하면 된다

UCLASS()
class KGAME_API UBTTask_FindPatrolPos : public UBTTaskNode
{
	GENERATED_BODY()
public:
	
	UBTTask_FindPatrolPos();

	virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;

};

 

2.  정찰 위치 값 반환


#include "BTTask_FindPatrolPos.h"
#include "KAIController.h"
#include "BehaviorTree/BlackboardComponent.h"
#include "NavigationSystem.h"

UBTTask_FindPatrolPos::UBTTask_FindPatrolPos()
{
	NodeName = TEXT("K_FindPatrolPos");
}

EBTNodeResult::Type UBTTask_FindPatrolPos::ExecuteTask(UBehaviorTreeComponent & OwnerComp, uint8 * NodeMemory)
{
	EBTNodeResult::Type Result = Super::ExecuteTask(OwnerComp, NodeMemory);

	auto ControllingPawn = OwnerComp.GetAIOwner()->GetPawn();
	if (ControllingPawn == nullptr)
		return EBTNodeResult::Failed;

	UNavigationSystemV1* NavSystem = UNavigationSystemV1::GetNavigationSystem(ControllingPawn->GetWorld());
	if (NavSystem == nullptr)
		return EBTNodeResult::Failed;

	FVector Origin = OwnerComp.GetBlackboardComponent()->GetValueAsVector(AKAIController::HomePosKey);
	FNavLocation NextPatrol;

	if (NavSystem->GetRandomPointInNavigableRadius(ControllingPawn->GetActorLocation(), 500.0f, NextPatrol))
	{
		OwnerComp.GetBlackboardComponent()->SetValueAsVector(AKAIController::PatrolPosKey, NextPatrol.Location);
		return EBTNodeResult::Succeeded;
	}

	return EBTNodeResult::Failed;
}

PatrolPoskey에 랜덤한 다음 위치를 넘겨받는다.

 

3. 행동트리에 추가


넘겨받은 PatrolPos 을 다음 이동위치로 지정한다

 

4. 행동트리 실행

void AKAIController::RunAI()
{
      UseBlackboard(BDAsset, Blackboard)
}      

blackboard는 AIControllor  UBlackboardComponent*  포인터 변수이다


 

 

'Unreal > Game 2 ' 카테고리의 다른 글

10.3 AI 공격  (0) 2019.07.05
10.2 AI 추격  (0) 2019.07.02
10. AI 만들기  (0) 2019.07.01
9.3 PlayerState - 작성 중  (0) 2019.06.30
9.2 플레이어 HUD  (0) 2019.06.30

+ Recent posts