1. 데코레이터
특정 노드가 실행될지에 대한 여부를 결정한다.
노드에 붙일 수 있다.
Blackboard 데코레이터를 붙여서 TargetToFollow가 설정되어 있을 때만 하위 노드를 실행하게 설정한다.
자세한 내용은 이전 포스트를 참조한다.
2. 피격 반응
(1) 피격 반응
몬스터가 피격 시 bHitReact를 변경하며 애님 몽타주를 재생하고 있다.
해당 변수를 블랙보드로 가져올 것이다.
void AAuraEnemy::PossessedBy(AController* NewController)
{
Super::PossessedBy(NewController);
// 클라이언트는 복제로 제공받음
if (!HasAuthority())
return;
AuraAIController = Cast<AAuraAIController>(NewController);
// 블랙보드 초기화
AuraAIController->GetBlackboardComponent()->InitializeBlackboard(*BehaviorTree->BlackboardAsset);
// 비헤이비어 트리 작동
AuraAIController->RunBehaviorTree(BehaviorTree);
// 블랙보드 키 기본값 설정
AuraAIController->GetBlackboardComponent()->SetValueAsBool(FName("HitReacting"), false);
}
블랙보드에서 키를 찾아 기본값을 false로 설정한다.
void AAuraEnemy::HitReactTagChanged(const FGameplayTag CallbackTag, int32 NewCount)
{
// 태그가 있을 때만 작동
bHitReacting = NewCount > 0;
GetCharacterMovement()->MaxWalkSpeed = bHitReacting ? 0.f : BaseWalkSpeed;
// 블랙보드 키 설정
AuraAIController->GetBlackboardComponent()->SetValueAsBool(FName("HitReacting"), bHitReacting);
}
HitReact Tag를 받을 때마다 bHitReacting 불리언을 변경하고 있다.
이를 블랙보드 키에 반영한다.
(2) 비헤이비어 트리 수정
하단의 셀렉터에 블랙보드 데코레이터를 하나 더 추가한다.
HitReacting 키의 값 변화를 추적하며 false일 때 중단한다.
3. 타겟에게 사거리까지 이동하기
몬스터의 타입에 따라서 적절한 AI를 도입할 것이다.
void AAuraEnemy::PossessedBy(AController* NewController)
{
Super::PossessedBy(NewController);
// 클라이언트는 복제로 제공받음
if (!HasAuthority())
return;
AuraAIController = Cast<AAuraAIController>(NewController);
// 블랙보드 초기화
AuraAIController->GetBlackboardComponent()->InitializeBlackboard(*BehaviorTree->BlackboardAsset);
// 비헤이비어 트리 작동
AuraAIController->RunBehaviorTree(BehaviorTree);
// 블랙보드 키 기본값 설정
AuraAIController->GetBlackboardComponent()->SetValueAsBool(FName("HitReacting"), false);
// 근거리, 원거리 판정
AuraAIController->GetBlackboardComponent()->SetValueAsBool(FName("RangedAttacker"), CharacterClass != ECharacterClass::Warrior);
}
블랙보드에 새로운 키인 RangedAttacker 불리언을 생성한다.
캐릭터 클래스가 워리어가 아니면 true가 된다.
4. 비헤이비어 트리 구성
셀렉터는 자손이 실패하면 다음 자손을 실행한다.
이 비헤이비어트리는 아래와 같은 순서로 작동한다.
(1) RangedAttacker가 true이며 거리가 600 이하이면 원거리 시퀀스 작동
(2) RangedAttacker가 false이면 원거리 노드 실패 -> 근거리 노드 작동
(3) 타겟까지의 거리가 500보다 작으면 근거리 시퀀스 작동
(4) 타겟까지의 거리가 500보다 크면 근거리 노드 실패 -> 타겟에게 이동 노드 작동
(5) 타겟까지의 거리가 4000보다 작거나 같으며 500보다 크면 시퀀스 작동
(타겟으로부터 500의 거리 유지)
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
13-7. AI - (7) 근거리 몬스터 - 캐릭터 주위의 랜덤 위치로 이동하여 공격 (0) | 2024.12.27 |
---|---|
13-6. AI - (6) 근거리 몬스터 - BTTask, 이동 접근 (0) | 2024.12.27 |
13-4. AI - (4) 부드럽게 돌리기, 몬스터에 이펙트 액터(물약 등) 적용 여부 (0) | 2024.12.27 |
13-3. AI - (3) 비헤이비어 트리 서비스 블루프린트 생성 - 가까운 플레이어 찾기 (0) | 2024.12.27 |
13-2. AI - (2) 커스텀 AI 컨트롤러, 비헤이비어 트리와 블랙보드 생성 (0) | 2024.12.27 |