언리얼 엔진5 Basic - 행동 트리 모델의 구현

타입·2024년 4월 26일
0

언리얼 강의

목록 보기
19/47

행동 트리 모델의 구현

NPC 행동 트리 모델

  • 내비게이션 메시 추가
    '액터 배치-볼륨-내비메시 바운드 볼륨' 추가
    브러시 세팅에서 볼륨 크기를 충분히 크게 지정
    '프로젝트 세팅-엔진-내비게이션 메시'에서 런타임 생성 옵션을 Dynamic으로 변경
  • NPC 행동 트리
    Detect 서비스로 범위 내 Pawn을 타겟으로 세팅
    • 타겟이 없으면
      랜덤 이동
    • 타겟이 있는 경우
      하던 일을 멈추고
      • 공격 가능하다면
        공격하며 타겟을 향해 회전
      • 공격 불가하다면
        타겟을 향해 이동


실습코드

https://github.com/dnjfs/ArenaBattle/commit/f45df07c70e3139044b3af52f2394123c9e208c9

  • BTTaskNode, BTService, BTDecorator 상속하여 구현
    • 상속하여 BT에서 사용 가능
      사진에선 BTTaskNode 타입으로 FindPatrolPos, TurnToTarget, Attack을 추가하였고
      BTService 타입으로 Detect
      BTDecorator 타입으로 AttackInRange 구현 (이름은 CanAttack으로 지정)
  • 인터페이스 추가하여 NPC 기능 확장
    • NPC 캐릭터 클래스에서 인터페이스 구현 후 BT 관련 클래스에서 인터페이스의 함수 활용
      UBrainComponent::GetAIOwner() 함수로 AIController를 찾고,
      AController::GetPawn() 함수로 캐릭터를 찾아 인터페이스 클래스로 캐스팅하여 사용
EBTNodeResult::Type UBTTask_Attack::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
{
	EBTNodeResult::Type Result = Super::ExecuteTask(OwnerComp, NodeMemory);

	APawn* ControllingPawn = Cast<APawn>(OwnerComp.GetAIOwner()->GetPawn());
	if (ControllingPawn == nullptr)
		return EBTNodeResult::Failed;

	IABCharacterAIInterface* AIPawn = Cast<IABCharacterAIInterface>(ControllingPawn);
	if (AIPawn == nullptr)
		return EBTNodeResult::Failed;

	...

	AIPawn->AttackByAI();
	return EBTNodeResult::InProgress;
}
profile
주니어 언리얼 프로그래머

0개의 댓글