언리얼 엔진 - 게임 프로젝트/GAS 프레임워크 RPG 프로젝트

몬스터 AI - 5) Task 클래스를 이용한 몬스터의 공격 구현

monstro 2025. 9. 20. 20:10
728x90
반응형

- 개요

플레이어에 근접한 몬스터공격하기 위한 두개의 Task 블루프린트를 생성한다

이때 생성하는 방식을 2개로 분리하여 다음과 같이 진행한다

  • BTTask_BlueprintBase 클래스를 상속받은 C++ 클래스를 부모로 블루프린트를 생성
  • BTTask_BlueprintBase 클래스로부터 블루프린트를 바로 생성

 

1) BTTask_Attack 클래스

 

BTTask_BlueprintBase 클래스로부터 BTTask_Attack 클래스를 생성한다

해당 클래스로부터 Task를 생성하여 동작시키기 위한 ExecuteTask 함수를 오버라이드한다

 

 

ExecuteTask 함수의 로직은 위와 같은데, 부모 버전의 함수를 호출한다

 

2) 언리얼 에디터

2 - 1) BTT_Attack 블루프린트 - 상속받은 C++ 클래스로부터 생성

 

ExecuteTask 이벤트 노드를 추가하고 위와 같이 로직을 구성한다

플레이어에게 근접했다면 몬스터의 위치 디버그 스피어를 그리고 Task를 종료한다

 

2 - 2) BTT_GoAroundTarget 블루프린트 - 원본 C++ 클래스로부터 생성

 

ExecuteTask 이벤트 노드를 추가하고 위와 같이 로직을 구성한다

BlackboardObject저장한 플레이어Actor로 가져오고 해당 Actor기준으로 무작위 위치값을 가져온다

가져온 위치값BlackboardVector로 저장하고 Task를 종료한다

 

2 - 3) BT_EnemyBehaviorTree 블루프린트

 

근접 몬스터가 수행하는 Sequence 노드에 위와 같이 Tasks 노드들을 추가한다

각각 다음과 같다

  • MoveTo 태스크 : TargetToFollow로 이동
  • BTT_Attack 태스크 : TargetToFollow에 근접했으므로 공격(현재는 디버그 스피어를 그림)
  • Wait 태스크 : 공격한 후 랜덤한 시간동안 대기
  • BTT_GoAroundTarget 태스크 : TargetToFollow를 기준으로 300의 범위에서 무작위로 가져온 값MoveToLocation에 저장
  • TimeLimit 데코레이터 : 2초 후abort를 발생시켜 Root 노드부터 다시 실행 
    • MoveTo 태스크 : MoveToLocation으로 이동

 

최종적으로 근접 몬스터인접한 플레이어공격하고 무작위 위치로 이동하는 로직2초마다 수행한다

 

- 최종 실행 결과

 

728x90
반응형