본문 바로가기
언리얼_엔진_게임개발_공부/언리얼 블루프린트

[언리얼/블루프린트] 언리얼 AI 행동 구현 - Behavior Tree

by jaboy 2025. 1. 6.

언리얼 엔진에서 AI 는 Behavior Tree 와 Blackboard 를 이용해 AI 의 행동 규칙을 정의 및 구현한다.

출처: 스파르타코딩클럽 내일배움캠프 언리얼 엔진 트랙 사전 강의 4주차

 

parallel : 조건에 맞는 태스크 실행

sequence : 여러 개의 태스크 순차적으로 실행

parallel : 여러 개의 태스크 한번에 실행

task : 실제 행동 (e.g. 캐릭터의 이동)

decorator : 태스크 실행에 있어 조건 및 기능 추가

service : 태스크가 실행되는 동안 일정시간마다 실행 (주로 데이터 갱신에 사용)

언리얼 엔진에서 AI는 비헤이비어 트리 Behavior Tree 와 블랙보드 Blackboard 를 이용해 구현된다.

 

Behavior Tree

Behavior Tree 그래프 편집 창. 노드 방식으로 배치한다

위에 보면 "invalid" 라고 되어 있는데, Move To 의 대상이 될 위치를 설정해주어야 한다.

이런 key 값을 Blackboard 이용해 설정할 수 있다.

Blackboard 편집 창. Key 를 더하고 편집한다.

 

Move To 가 받을 TargetPosition 벡터 Key 를 생성해 주었다.

그럼 이제 Behavior Tree 에서 Move To 가 이 블랙보드에서 방금 만든 TargetPosition 값을 쓸 수 있도록 해야겠죠?

 

Behavior Tree 의 디테일 패널에서 Blackboard Asset 설정 후...

 

Move To 노드 선택 후 디테일 패널에서 Blackboard Key 를 TargetPosition 으로 설정

 

 

 

 

BTD_IsNearPlayer

플레이어가 가까운지 조건을 판단 및 타겟 위치를 정하는 Decorator - Target Position 을 플레이어의 위치로 정하고 태스크 실행 (return true)

 

AI Character 클래스에 대해 시야 (Sight - cone component) 오버랩 체크 - 오버랩된 액터가 플레이어 폰인 경우 - 블랙보드의 target position 변수 값을 플레이어 폰의 위치로 set - return true

Sight - 원뿔 cone component 로 추가 - 이에 대한 오버랩 검사

 

BTS_FindingRandom

플레이어가 가깝지 않은 경우 실행되는 Service - 랜덤 위치 계속 갱신

AI 활성화 되었을 때 - Nav 로 설정된 범위에서 랜덤 로케이션 - target position 으로 set

 

AI Tick 마다 - 타겟 포지션과의 거리가 10보다 작으면 현재 위치로부터 radius 범위에서 랜덤 로케이션 - target position 으로 set

 

To be continued...