[UE] 몬스터 AI 구현 #3 (Behavior Tree)
1. 추적 및 캐릭터 공격
AI Controller에 Behavior Tree 할당 (Set State as Passive는 아래 설명)
AI의 상태를 나타내는 Enum 생성
Passive, Attacking 상태로 설정해주는 함수 생성 ㅡ> 해당 State 기반으로 행동 결정(Decorator)
몬스터 클래스에 Attack 함수 생성 (Call On Attack End는 공격이 끝났을 때 알림을 주는 함수)
BTTask로 DefaultAttack 생성 (Attack 수행 후, 끝났다는 알림이 오면 행동 마무리)
상태를 나타내는 변수 및 공격 대상을 저장할 Key Blackboard에 추가
BTTask로 ClearFocus, FocusTarget 생성 (FocusTarget은 BT에서 Attack Target Key에 블랙보드 AttackTarget 지정)
Move To로 이동(Move To의 블랙보드 키 값을 AttackTarget으로 지정)
플레이어 추적 및 공격 트리 (Decorator는 블랙보드의 State값이 Attacking일때 동작하도록 설정)
2. Patrol
BP로 Actor를 생성해 다음과 같이 Spline 컴포넌트 추가 및 변수 설정(처음과 끝에서 방향 전환하도록)
GetSplinePointsAsWorldPostion이라는 함수 생성
BP_NPC의 부모 클래스인 BP_BaseCharacter에 다음과 같이 GetPatrolRoute 함수 정의
BTTask로 MoveAlongPatrolRoute 생성
Patrol 트리 (State값이 Passive일 때 동작하도록 데코레이터 설정)
현재 Perception이 없어 특정 키 입력을 통해 State 변화에 따른 BT가 정상 작동하는지 확인하기 위한 함수 추가
ㅡ> 플레이어가 1 입력 시, 몬스터의 State가 Attacking, Passive 중에 반대로 전환
레벨에 몬스터와 BP_PatrolRoute 배치 후, 몬스터의 Patrol Route 변수에 할당
전체 트리
결과
3. 배운 점
- 블랙보드 키 값을 이용하는 방법
- Behavior Tree의 구성 방법
- 스테이트 전환 간 남은 Task를 수행하고 전환되는 문제를 Abort를 이용해 해결 가능
- 데코레이터로 지정된 블랙보드 키 값이 변하는 것을 어느 시점에 감지할 것인지 설정 가능
참고자료
https://www.youtube.com/watch?v=WFV5IewGks8&list=PLNwKK6OwH7eW1n49TW6-FmiZhqRn97cRy&index=3