C++에서 BTServices
이번에는 행동 트리의 새로운 개념인 서비스에 대해 알아본다.
기존에 AIController의 Tick 함수에 구현했던 내용을 서비스를 통해 구현하게 된다.
(플레이어 위치, 플레이어 마지막 위치 등)
Tick은 매프레임마다 탐색을 하므로 대신 서비스 기능을 사용하여 일정 구간마다 탐색하도록 하게 된다.
우선 행동 트리에서 서비스를 생성해보자.
우리가 생성할 기능은 AI가 플레이어 방향을 따라오도록 Default Focus 기능이다.
해당 기능을 통해 기존에는 무조건 앞에만 바라보던 AI가 플레이어 위치에 따라 자연스럽게 방향을 따라오게 된다.
이제 이러한 서비스를 Vscode에서 직접 만들어보자.
이를 위해 C++ 클래스를 생성해주는데, 우리는 블랙보드 키 값을 통해 설정할 것 이므로, BTService_BlackBoardBase를 기반으로 생성해주자.
그리고 BTSerivce에는 기존 Tick 기능을 하되, 매 프레임이 아닌 일정 간격으로 호출하는 TickNode 함수가 있다.
우리는 이를 사용하여 Tick안에 구현했던 내용을 대체하게 된다.
이제 생성자를 통해 노드 이름을 설정해주고, TickNode 함수를 구현해주자.
플레이어 위치를 알기 위해서는 Pawn에 접근해야 하기 떄문에 Pawn을 얻어주자.
그리고 전과 같이 GetBlackboardComponent() 함수를 통해 벡터 값을 얻어주면 된다.
해당 함수는 행동 트리 컴포넌트인 OwnerComp로 접근하게 된다.
이를 위한 헤더 파일 선언도 잊지 말고 해주어야 한다.
이제 이를 통해 플레이어 위치를 주기적으로 업데이트 하는 기능을 Service를 통해 구현하였다.
우리는 추가적으로 플레이어가 AI의 시야에 있는지 아닌지에 대한 기능도 필요하다.
이 또한 Service를 통해 구현해주자.
내용은 크게 달라질 것 없이 Tick에서 구현했을 때와 같이 LineOfSigtTo 함수를 통해 체크를 해주고 있으면 값을 할당,
없으면 값을 비워주면 된다.
그리고 LineOfSightTo 함수가 AIController에 속한 함수이기 때문에, AIController도 Playerpawn과 마찬가지로 null인지 아닌지도 추가로 체크해주는 것이 좋다.
'Unreal > Udemy 강의' 카테고리의 다른 글
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 6-40 (0) | 2024.07.19 |
---|---|
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 6-37 (0) | 2024.07.15 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 6-35 (0) | 2024.07.14 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 6-34 (0) | 2024.07.13 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 6-33 (0) | 2024.07.12 |