언리얼엔진/언리얼 C++

Behavior Tree (Task, Service, Decorator) - C++

season97 2024. 10. 25. 14:48

 개인적인 공부를 위해 포스팅 하는 글입니다.


 

# 테스크, 서비스, 디코레이터를 C++로 만들어 보자

ㆍ 이런식으로 상속을 받는 C++를 테스크, 데코, 서비스를 파주자. 

 

# 모듈을 추가해 주자

 


# 서비스

ㆍ Tick을 이용해서 만든 서비스 블루프린트 버전이였다. 이걸 C++로 옮기면..

ㆍ 설명이 필요없게 직관적이다. TickNode같은 경우는 f12로 타고들어가서 찾아줫다

ㆍ 이런 여러가지 옵션들을 생성자에서 설정해 줄 수 있다. 

ㆍ 변수명같은 경우엔 보통 에디터를 영어로 하고 보면 동일하긴 하다.

void UBTService_FindTarget::TickNode(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds)
{
	Super::TickNode(OwnerComp, NodeMemory, DeltaSeconds);

	APawn* LocalPawn = OwnerComp.GetAIOwner()->GetPawn();
	if (LocalPawn == nullptr)
	{
		return;
	}

	UWorld* World = LocalPawn->GetWorld();
	if (World == nullptr)
	{
		return;
	}

	FVector Location = LocalPawn->GetActorLocation();
	TArray<FOverlapResult> OverlapResults;
	FCollisionQueryParams CollisionQueryParam(NAME_None, false, LocalPawn);

	bool bResult = World->OverlapMultiByChannel(
		OverlapResults,
		Location,
		FQuat::Identity,
		ECollisionChannel::ECC_GameTraceChannel2,
		FCollisionShape::MakeSphere(SearchRadius),
		CollisionQueryParam
	);

	if (bResult)
	{
		for (FOverlapResult& OverlapResult : OverlapResults)
		{
			AR1Character* R1Character = Cast<AR1Character>(OverlapResult.GetActor());
			if (R1Character)
			{
				OwnerComp.GetBlackboardComponent()->SetValueAsObject(TargetKey.SelectedKeyName, R1Character);
				DrawDebugSphere(World, Location, SearchRadius, 16, FColor::Green, false, 0.2f);
				return;
			}
		}
	}

	OwnerComp.GetBlackboardComponent()->SetValueAsObject(TargetKey.SelectedKeyName, nullptr);
	DrawDebugSphere(World, Location, SearchRadius, 16, FColor::Red, false, 0.2f);
}

ㆍ Collision같은 경우에 C++로 오면 코드가 좀 지저분해진다... 채널별로 어쩌구 저쩌구... 이런건 찾아서 필요한걸 잘 사용하도록 하자

 

 

#테스크와 데코레이터

ㆍ 핵심은 별로 다를게 없어서 코드만 첨부

 

 

# 에디터에 노출되며 비해이비어 트리에서 사용할 수 있다.

 

 

 

※ 작업을 BP로 좀 크게 해보고 C++로 옮기는 식으로 연습을 많이 해봐야겠다.

'언리얼엔진 > 언리얼 C++' 카테고리의 다른 글

객체를 따라다니는 UI  (1) 2024.10.25
UI 위젯블루프린트  (4) 2024.10.25
Behavior Tree (Task, Service, Decorator) - BP  (1) 2024.10.25
AI Controller  (0) 2024.10.24
Post Process  (0) 2024.10.23