본문 바로가기

Unreal

[Unreal] BTTaskNode에서 ExecuteTask, TickTask 사용법

BTTaskNode는 Behavior Tree에서 사용된다. 

BTTaskNode는 ExecuteTask로 한번 실행되고 TickTask는 FinishLatentTask가 실행될 때까지 매 틱마다 실행된다.

함수들은 EBTNodeResult를 반환하고 EBTNodeResult의 종류는 Succeded,Failed,InProgress,Aborted 4가지가 있다.

 

EBTNodeResult::Type UMyBTTask::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
{
    if (!OwnerComp.GetAIOwner())
    {
        return EBTNodeResult::Failed;    
    }
 
//Do logic here
 
return EBTNodeResult::Succeeded;
}

 

ExecuteTask의 기본 형태로 위 코드는 Behavior Tree의 OwnerComp가 존재하지 않을 경우 Fail, 아니면 Succeed를 반환한다.

 

EBTNodeResult::Type UBTTask_MonsterFireWeapon::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
{
    if (!OwnerComp.GetAIOwner())
    {
        return EBTNodeResult::Failed;    
    }
     
    return EBTNodeResult::InProgress;
}
void UBTTask_MonsterFireWeapon::TickTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds)
{
    if ( TickTask를 마무리하는 조건 )
    {      
        FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
    }
}

 

TickTask를 이용하고 싶다면 먼저 ExecuteTask를 선언하고 EBTNodeResult::InProgress를 반환한다. TickTask에서는 매 틱마다 반복하다가 FinishLatentTask로 TickTask를 종료한다.