AI는 AIController에 의해 제어된다.
흔히 생각하는 몬스터의 패턴 등은 Behavior Tree(행동 트리)로 작성하게 된다.
Blackboard(블랙 보드)는 행동 트리에서 관리하는 데이터라고 보면 된다.
행동 트리와 블랙 보드는 블루프린트와는 개념이 다르다. 에디터에 존재할 뿐이다.
프로젝트 빌드 파일의 공개 종속성 모듈에 "AIModule", "GameplayTasks" (BTTaskNode 사용시 필요) 를 추가해주어야 한다.
AAIController::RunBehaviorTree(UBehaviorTree* BTAsset);
AIController에서 RunBehaviorTree 호출시 행동 트리에 포함된 블랙 보드까지 AIController에 자동으로 등록된다.
이후 GetBlackboardComponent 호출로 블랙보드에 접근할 수 있다.
GetBlackboardComponent()->SetValueAsVector(KeyName, VectorValue); // key-value 등록
GetBlackboardComponent()->ClearValue(KeyName); // key-value 초기화
블랙 보드는 <key, value> 형식으로써 c++의 map과 유사하다고 보면 될 것 같다.
노드는 크게 Composites, Decorator, Service, Tasks로 총 4종류가 있다.
Composites 노드
높은 우선순위의 자식 노드부터 순차적으로 실행된다.
- Selector: 자식 노드 중 하나라도 실행 성공시 성공한 것으로 본다. 옆의 노드들은 더 이상 실행되지 않는다.
- Sequence: 자식 노드 중 하나라도 실행 실패시 실패한 것으로 본다. 옆의 노드들은 더 이상 실행되지 않는다.
- Simple Parallel: 이름 그대로 단순 병렬 노드이다. 전체 노드 트리와 동시에 하나의 태스크를 실행시킨다.
Decorators 노드
조건절이라고도 한다. if의 개념과 같다. 컴포짓이나 태스크노드에 붙여서 실행 여부를 정의할 수 있다.
Services 노드
Tasks 노드
AI의 이동이나 블랙보드의 값 조정등의 작업을 한다.
Tasks 노드를 C++ 커스텀으로 만들시에는 공개 종속성 모듈에 "GameplayTasks"를 포함시켜 주어야 한다.
커스텀 노드를 만들었다면 ExecuteTask를 구현하면 된다.
매개변수 OwnerComp를 통해 블랙보드와 AIController에 접근할 수 있다.
EBTNodeResult::Type을 반환함으로써 성공/실패 유무를 반환한다.
'언리얼 엔진 > 정보' 카테고리의 다른 글
조준점 HUD 구현 (0) | 2022.11.05 |
---|---|
에이밍 시스템 구현 (0) | 2022.10.27 |
파생 데이터 캐시 경로(DDC) 바꾸기 (0) | 2022.10.13 |
Mixamo의 루트모션 애니메이션 사용 (0) | 2022.10.12 |
커스텀 CharacterMovement (0) | 2022.10.12 |