안선생의 개발 블로그

[UE5 AI] Behavior Tree - Service 본문

언리얼/AI

[UE5 AI] Behavior Tree - Service

안선생 2024. 3. 21. 23:24

 Behavior Tree  - Service?

Service는 Behavior Tree에서 각 task나 composite에 붙여 사용하는데, task가 실행되기 전에 먼저 실행되어 blackboard에서 값을 읽어 각 task에 값을 공급하는 등의 역할 또한 Service란 이름처럼 task나 composite가 실행되는 동안에 주기적으로 동작을 반복수행합니다.

 

서비스는 주로 Behavior Tree의 특정 상태에서 AI 캐릭터의 상태를 모니터링하거나 업데이트하는 데 사용됩니다. 예를 들어, 캐릭터가 특정 위치로 이동하도록 지시하는 행동 트리가 있다고 가정해 보겠습니다. 이동 중에 캐릭터의 위치를 계속 확인하고 목표 위치에 도달했는지 확인하려면 서비스를 사용하여 이러한 동작을 주기적으로 실행할 수 있습니다.

서비스는 Behavior Tree에서 다른 노드와 마찬가지로 조건, 액션과 유사한 구조를 가지며, Behavior Tree에 포함된 노드 중 하나로 사용됩니다. 서비스는 Behavior Tree를 사용하여 AI 캐릭터의 복잡한 행동을 조정하고 상태를 감시하는 데 유용한 도구

 

 

 

한번 실제로 사용해보자

새 서비스를 만들어줍시다.

 

이름은 간단하게 하고

 Event Receive Activation AI 이벤트를 실행하여 S1을 출력합니다.

 Event Receive Activation AI 는 활성화 될 떄 한번 실행됩니다.

 

비헤어트리를 실행해볼게요 위에 테스크는 그냥 Hello출력하는 Task입니다.

\

실행결과

서비스가 먼저 실행되는거를 알 수 있음.

 

즉 서비스로 블랙보드를 바꾸면  Task는 바뀐 블랙보드 값으로 실행된다.

 

다른 예시를 해보겠습니다.

GetRandomLocationInNavigableRadius는 내비게이션이 활성화 되있으면 Orign위체에서 Raidus만큼 만큼 랜덤 위치를 반환 100이니 10cm이내로 반환.

이 이벤트는 랜덤위치를 블랙보드 백터 키값에서 저장해주는 서비스입니다.

 

이제 키값을 설정해주고 실행해보겠습니다.

 

 

계속 키값이 바뀌는걸 알 수 있음

 

이렇게 Task가 실행되기전에 값을 공급해주는 역할을 할 수 있다.

 

 

서비스에는 Tick도 있다.

아래와 같이 Tick AI를 호출해주면 되는데 컨트롤러가 존재할때만 실행되게 조건을 걸수도 있다. 그러면 해당 서비스를 갖고있는 컴포즈나 Task를 실행할 때 계속 서비스가 실행된다.

 

 

만약 Move to Task를 사용하는데 계속 똑같은 플레이어만 쫓을테니 서비스에 있는 Tick 사용하여 가까운 플레이어 위치를 계속 바꿔줄 수 있다. 

 

디테일 패널창에서 틱 간격을 조정할 수 있다.

0.5 편차 .1이라 0.4에서 0.6

 

서비스는 Task나 컴포즈가 실행될 때 서비스를 반복적으로 실행해서 블랙보드에 있는 블랙보드에 있는 키값을 바꾸는 기능이라고 생각하면 된다.