Behavior Tree (Idle --Patrol)

Behavior Tree example

cwisky 2018. 10. 31. 01:37

Animation Starter Pack에 포함된 Skeletal Mesh와 애니메이션 시퀀스를 사용한 Behavior Tree예제


아래의 예제는 가급적 비헤이비어 트리에 대부분의 스크립트를 포함하는 것을 목적으로 작성한 것이므로 특정 패턴과는 견해가 다를 수 있다. 비헤이비어 트리의 기본 개념을 이해하기 위한 예제이다. 

아래와 같이 작성하고 게임을 실행하면 AI 캐릭터가 비헤이비어 트리의 로직에 따라 Idle, Patrol 상태를 반복하며 지정된 애니메이션이 실행되는 것을 확인할 수 있다


비헤이비어 트리의 내용

ASP에 포함된 캐릭터가 Patrol 상태에서는 임의의 이동가능한 장소를 정해서 이동하고 이동을 마친 후에는 Idle 상태로 전환하고 2초 동안 쉰다. 그리고 다시 Patrol 상태로 전환되어 같은 내용이 무한히 반복된다


작업절차

  1. 일인칭 템플릿을 사용한 프로젝트를 생성하고 레벨에 Nav Mesh Bound Volume 설정
  2. 마켓 플레이스에서 Animation Starter Pack을 검색하여 프로젝트에 포함한다
  3. ASP에 포함된 Ue4ASP_Character(블루프린트)를 복사하여 BP_AIEnemy 라는 이름으로 저장하고 더블클릭하여 캐릭터 뒤에 배치된 카메라와 카메라붐을 삭제하고 저장한 후 CB에서 드래그하여 레벨에 배치한다
  4. AIController를 기반으로 BP_AIController 클래스를 생성한다
  5. CB에서 마우스 우측 > 인공지능 > 비헤이비어 트리 > 이름을 BT_EnemyAI 으로 저장한다
  6. CB에서 마우스 우측 > 인공지능 > 블랙보드 > 이름을 BT_EnemyBlackboard 으로 저장한다
  7. Ue4ASP_Character 더블클릭 > 디테일뷰 > AIController 항목 : BP_AIController 설정
  8. BT_EnemyAI 더블클릭 > 블랙보드 항목 : BT_EnemyBlackboard 설정
  9. Enum_GameState : 게임상태를 저장할 열거형 블루프린트 클래스
  10. BP_EnemyAnim : 애니메이션 블루프린트(스테이트 머신을 이용한 애니메이션 실행)
  11. 비헤이비어 트리의 툴바를 통해 생성되는 3개의 Task
  • Task_GetRandomPos : AI캐릭터가 이동가능한 임의의 위치벡터 생성
  • Task_Set_Idle : 게임상태 변수를 STATE_IDLE로 설정(AIController, Blackboard)
  • Task_Set_Patrol : 게임상태 변수를 STATE_PATROL로 설정(AIController, Blackboard)



AI 캐릭터 클래스인 Ue4ASP_Character에는 아무런 스크립트도 작성하지 않았다


BP_AIController 의 이벤트 그래프에는 다음과 같이 작성한다



BT_EnemyAI 는 다음과 같이 작성



BT_EnemyBlackboard



Enum_GameState



BP_EnemyAnim(애니메이션 블루프린트, 이벤트 그래프)



BP_EnemyAnim(애니메이션 블루프린트, 애님 그래프)



Task_GetRandomPos



Task_Set_Idle



Task_Set_Patrol