언리얼엔진/언리얼 C++

Behavior Tree (Task, Service, Decorator) - BP

season97 2024. 10. 25. 13:27

 개인적인 공부를 위해 포스팅 하는 글입니다.


# AI를 구성하기 위해선

ㆍ 블랙보드, AI Controller, Behavior Tree가 필요하다.

 

# 블랙보드

ㆍ 칠판처럼, 뇌처럼 즉 AI에서 필요한 변수들을 저장하는... 

 

# AI컨트롤러에서 간단하게 불러오기. 코드로도 쉽게 고칠 수 있겠다. 

 

 

# Behavior Tree

ㆍ 만들고 블랙보드를 바인드 해주고

 

#여러가지 노드들

ㆍ 기존에 알고있던거라 자세한 포스팅은 생략. 기억 안나면 주석을 보자

 


▶ 테스크 노드

ㆍ 새 태스크 노드를 만들어 정의할 수 있는데. 이걸 C++로 할 수 있다.

ㆍ 실제 행동에 관련된 노드들, 일감 느낌

 

# 테스크 노드 블루프린트

ㆍ 일단 저기서 Execute AI 이벤트를 찾아서 눌러주자.

※ 흐름을 간단하게 보자면..

ㆍ LocationKey라는 Blackbord 키 선택툴 이라는 변수를 통해 행동트리에서 블랙보드의 키값을 설정할 수 있게

구조가 짜여있다. 

※ 결과는 랜덤한 1000의 범위 내에서 적이 정찰을 한다.

 


▶ 서비스 노드

 

 

# 하지만 모든걸로 Task로 구현하긴 좀 힘들것이다

ㆍ 코드로 치면 싱글톤같이... 테스크와 상관 없이 계속 돌아가는 그런게 있으면 좋겠다.

ㆍ 플레이어가 감지되었을땐 플레이어를 감지할 수 있는 그런... 서비스가 필요하다

# 그게 바로 서비스 노드

ㆍ 만들고 Recive Tick AI 이벤트를 오버라이드 하자

 

 

 

감지된 엑터를 블랙보드 키 선택 툴에 넣어줘 행동트리와 블랙보드에서 관리할 수 있게 해준다.

 

ㆍ 만들어진 서비스 노드는 어딘가에서 기생하여 사용할 수 있다.

ㆍ 0.5초마다 실행이 되고 있다. 그리고 타겟 키를 설정하는거를 잊으면 안된다.

 


 

▶ 데코레이터

ㆍ 조건을 다는 개념이라고 보면 된다. 

 

ㆍ 타겟이 있다면? 일로 들어오고 없다면? 절로들어가.

ㆍ 얘도 기생해서 쓴다 만들어 줄 수도 있고, 가장 많이 쓰는건 저 Blackboard 저놈이다

 

※ 데이터를 보고 판단하겠다.

ㆍ 참 거짓 조건을 이렇게 달아줄 수 있고, 그에 따라 이곳으로 탈건지 아닐건지를 판단할 수 있다

 

# 당연히 커스텀도 가능하다

ㆍ 새 데코레이터를 파줘서 이렇게 정의해줄 수도 있다.

ㆍ 역 조건으로 바로 판별도 가능하다.

ㆍ 값이 바뀔때는 새로고침이 바로 될 수 있게 해줘서 버벅임을 없앴다.

 

 

※ 다음 포스팅엔 이걸 C++에서 해보는 작업을 해 볼 예정.

'언리얼엔진 > 언리얼 C++' 카테고리의 다른 글

UI 위젯블루프린트  (4) 2024.10.25
Behavior Tree (Task, Service, Decorator) - C++  (0) 2024.10.25
AI Controller  (0) 2024.10.24
Post Process  (0) 2024.10.23
데미지 처리와 애니메이션 노티파이  (0) 2024.10.23