이문회우

[Unreal Behavior Tree] 공식 문서 읽기 본문

[Unreal Behavior Tree] 공식 문서 읽기

Koesob 2023. 5. 14. 23:30

참고 공식 문서

언리얼 엔진의 비헤이비어 트리 - 퀵 스타트 가이드 | 언리얼 엔진 5.0 문서 (unrealengine.com)

 

비헤이비어 트리 퀵 스타트 가이드

이 가이드에서는 순찰하거나 플레이어를 추격하는 AI 캐릭터를 비헤이비어 트리로 구성하는 방법을 알아봅니다.

docs.unrealengine.com


Blackboard

공식 문서에서는 언리얼 AI 시스템에서 '두뇌'를 맡는다고 되어있지만, 실제 판단은 Behavior Tree가 하기 때문에 와닿는 비유는 아니다.

이와 관련해서 ChatGPT에게 물어보니 '중앙 데이터 저장소'라고 한다.

GPT야 답을 알려조

적절한 비유다.

언리얼 AI 시스템은 크게 두 축으로 구성돼 있는데,

'캐릭터의 상황을 받아들이는 부분'과 받아들인 정보를 바탕으로 '일련의 과정을 통해 판단을 내리는 부분'이 있다.

여기서 전자, 상황을 받아들이는 부분이 Blackboard다.

이 AI 시스템이 붙어있을 오브젝트의 위치나 가속도, 그 외 기타 등등 필요한 정보를 가져올 수 있는 공간이다.

특히, 이 때 '상황으로부터 받아들일 정보'가 Blackboard Key라고 한다.

이 Blackboard Key가 Behavior Tree로 전달돼서 판단에 쓰이게 된다.

 

Behavior Tree

'일련의 과정을 통해 판단을 내리는 부분'을 맡는다.

기본적으로 판단을 시작하는 Root를 갖고 있고, 그 Root에 연결된 줄기의 흐름에 따라서 판단을 하게 된다.

아래는 이 Behavior Tree의 구성 요소들

Composite

줄기의 고급진 표현이다. 즉, Behavior Tree의 흐름은 모두 이 Composite이다.

밑에 있는 Selector, Sequence, Simple Parallel은 각각마다 고유의 방식으로 흐름을 제어한다.

흐름은 기본적으로 위에서 아래로, 왼쪽에서 오른쪽으로 진행된다.

Task

설명 편의상 Task 먼저 설명하겠다.

Composite이 줄기라면 이 Task는 나뭇잎 또는 과실과 같은 최종 목적지이다.

Composite의 흐름에 따라서 이 Task에 도달하면, 해당 Task가 실행되게 된다.

Selector

왼쪽에서부터 오른쪽으로 진행하며, 처음으로 실행 가능한 Task 또는 Composite을 실행시킨다. 그렇게 실행을 완료했으면 부모 노드로 되돌아간다. 즉, 해당 실행 노드 오른쪽에 있는 애들은 무시됨.

결국 하나만 실행시키기 때문에 Select. 선택자이다.

Sequence

왼쪽에서부터 오른쪽으로 진행하는 것은 Selector와 동일하다.

하지만 실행에 성공했다고 부모 노드로 되돌아가는 것이 아니라, 왼쪽에서 오른쪽으로 순차적으로 다 실행시킨다.

그러다 실패했을 때 멈추고 돌아간다. Selector는 계속 실패하다 하나라도 성공하면 되돌아가는 것과 대조적이다.

Sequence, '순차적'이란 의미 그대로이다.

Simple Parallel

자식 노드를 일단 다 동시에 실행시킨다. Simple Parallel이란 의미 그대로.

이 때 모든 자식 노드가 성공해야만 Simple Parallel이 성공으로 간주된다.

Decorator

Decorator는 노드에 붙어서(Decorate라는 단어 그대로) 해당 노드가 실행되기 전에 If문을 거는 것이다.

사실 상기한 Composite이 '흐름 제어'를 하지만 프로그래밍에서 보통 '흐름 제어'라 말하는 조건문은 없다.

Decorator가 그 조건문이라 보면 된다.

Service

특정 노드가 실행되고 있을 때, 그 노드에 붙어서 주기적으로 실행되는 애들이다. Update다.

 

끗. 이상 ChatGPT 짱짱맨


2022.11.23. 던전 앤 시그널 SW 페스티벌 대상 (tistory.com)

 

2022.11.23. 던전 앤 시그널 SW 페스티벌 대상

와! 대상! 와! 알고보니 각 부문별 최우수상 받은 작품 중에 다시 대상을 수상하는 것이더라. 그래서 상금이 더 커졌다. 대신 공동 수상이라 반토막. 플레이 영상을 올리고 싶지만 안드로이드에

koesob.tistory.com

최근에 이때 만든 게임을 재구성해보는 시도를 하고 있다.

오토배틀러 장르의 게임이라 이 Behavior Tree를 사용하는데

지환이형이 언리얼의 Behavior Tree 시스템을 고스란히 유니티로 옮겨온 덕택에 가능했다.

지금 그 코드를 읽어보면서 공부하고 있는데...

어케했ㄴ;;;

와중에 언리얼의 Behavior Tree 에디터 창을 그대로 유니티로 가져왔다.

정말 학교 사람들 미친거 같아요....

 

덕분에 나는 꽁으로 유니티에서 Behavior Tree 구현하는 법을 배우고 있다. 사랑합니다❤❤


Behavior(미국식) Behaviour(영국식) 뭔가 자꾸 헷갈리길래 왜 그런가 했더니

언리얼에선 Behavior를 사용하고, 유니티에서는 MonoBehaviour를 필두로 Behaviour를 사용한다.

허허