1. 비헤이비어 트리 서비스 블루프린트

(1) 블루프린트 클래스 생성

BTService_BlueprintBase를 부모로하는 블루프린트를 생성한다.

이 클래스는 C++용이 아닌 블루프린트에서 구현하는 클래스이다.

 

(2) 블루프린트 디테일

이 BT서비스를 이용하여 가장 가까운 플레이어를 찾게 할 것이다.

간격은 몇 초마다 틱을 발동할 것인지 설정한다.

랜덤 편차를 통해 간격에 해당 값을 더하거나 뺀 시간 이후에 작동하게 한다.

(0.4 ~ 0.6)

 

 

2. 블랙보드 키 생성

(1) 블랙보드 키

블랙보드 키를 사용하면 비헤이비어 트리가 작동하는데에 필요한 맴버 변수를 저장할 수 있다.

BT서비스 블루프린트에서 변수를 만들어 오른쪽의 눈 모양을 클릭한 후 컴파일하면 비헤이비어 트리의 디테일에서 해당 키를 지정할 수 있게 된다.

 

 

(2) 블랙보드 키를 블루프린트로 가져오기

Get Blackboard Value as 노드들을 이용하면 블랙보드 키에 할당된 것을 블루프린트에 가져올 수 있게 된다.

 

 

(3) 블랙보드에 새로운 키 추가하기

몬스터가 대상을 따라다니도록 하기 위해 따라다닐 대상과 대상과의 거리를 블랙보드 키로 생성한다.

 

 

3. 태그로 플레이어 파악하기

(1) 각 블루프린트에 태그 추가

게임플레이 태그가 아닌 언리얼에서 기본적으로 제공되는 Tag를 사용하여 해당 클래스에 이름표를 붙일 수 있다.

예를 들어, BP_EnemyBase에 태그를 지정할 수 있다.

BP_AuraCharacter에 대해서도 태그를 추가한다.

이제 블루프린트에서 액터의 태그를 확인할 수 있다.

 

 

(2) Actor Has Tag

Actor Has Tag 함수를 사용하여 AI가 Player Tag를 가진 액터를 찾고 Player로 표시한다.

 

 

4. 가장 가까운 플레이어 찾기 - 기본적인 길 찾기 알고리즘

 

(1) Best Case

가장 가까운 플레이어를 찾기 위해 Best Case를 저장하는 ClosestDistance를 매우 큰 값으로 지정한다.

 

 

(2) 거리 계산

Player 태그를 가진 Actor를 대상으로 Each Loop를 돌아서 대상과의 거리를 구해 Best Case의 거리와 비교한다.

거리가 더 짧으면 짧은 값을 Best Case로 대치한다.

가장 가까운 액터를 멤버 변수로 지정한다.

 

 

(3) 찾은 값을 블랙보드 키로 저장하기

 

루프가 끝나면 찾은 Best Case를 블랙보드 키로 저장한다.

새로 저장한 블랙보드 키의 눈 아이콘을 클릭한다.

서비스의 변수들이 노출되어 위의 블루프린트의 블랙보드 키를 비헤이비어 트리 내의 블랙보드의 키으로 지정할 수 있게 되었다.