게임 개발/학습 일지

Unreal 언리얼 부트캠프 - AI 시스템 구현하기

이개 2026. 2. 16. 17:05

AI는 규칙에 따라 움직이며, 규칙에 따라 어떤 행동을 할 지 결정한다.

 

기본 구조

루트: BT의 시작점이며, 행동 결정의 밑바탕이 됨

셀렉터: 조건을 검사하여  상황에 맞는/맞지 않는 태스크를 구분해서 실행
시퀀스: 순차 진행. 여러 개의 태스크를 순차 실행
패러렐: 병렬 진행. 여러 개의 태스크를 묶어서 한번에 실행

 


태스크: 실제 행동(캐릭터 이동 등)
서비스: 일정 시간마다 실행되며 주로 데이터 갱신하는데 사용

데코레이터: 태스크 실행 여부에 조건을 추가하거나, 특정 기능을 추가하는 역할

 

 

위의 구성을 Behavior Tree, BT라고 하며 이를 에셋으로 만들 수 있다.

 

 

제작 과정

비헤이비어 트리 생성
노드를 끌어 Selector, Move To 생성

Move To는 AI 공간을 이용해서 움직여줌

블랙보드라는 에셋을 만들어 데이터를 저장, 읽기, 내보내기를 해줘야함

 

블랙보드 설정
우측 상단의 블랙보드 탭으로 이동
벡터 키를 하나 설정해준다.

 

 

SelfActor는 이를 가지고 있는 액터가 자동으로 저장되는 키

 

 

Move To로 돌아와 블랙보드에 타겟 포지션 설정
똑같이 타겟 포지션 하나 더 설정

 

 

조건 설정용으로 데코레이터 -> BTDecorator_BlueprintBase 추가 후 저장

 

 

AI로 돌아와서 데코레이터 추가

 

데코레이터에서 Perfom Condition Check 추가(AI가 붙은 것들은 AI 컨트롤 시 우선순위)

 

 

 

 

 

 

 

전체 노드 구성

 

 

 

 

새 서비스를 눌러 BTS_FindingRandom을 선택 후 저장해준다.

 

 

함수 오버라이드로 타겟 포지션을 랜덤하게 설정해준다. ReceiveActivation 선택

 

내비게이션: 최적의 경로를 찾아주는 기능. 장애물도 피할 수 있다.

뷰포트 추가 패널에서 내비메시 바운드 볼륨 선택
P를 누르면 영역이 보인다. 이는 AI 내비게이션 시스템이 움직일 수 있는 영역을 나타낸다.
브러시 세팅으로 크기를 조절할 수 있다.

 

FindingRandom으로 돌아와서, Get Random Location in Navigable Radius(특정 반경 범위 내에 랜덤 포지션을 정해줌) 노드 생성

 

서비스 노드 : 타겟 포지션 설정
서비스 노드: 타겟 포지션 도착시 타겟 포지션 재설정

조건이 맞으면 타겟 포지션은 BTD_InsNearPlayer 실행

조건이 맞지 않으면 BTS_FindingRandom 실행

비헤이비어 트리에 서비스 추가
완성된 비헤이비어 트리