비헤이비어 트리 에셋 생성
이 섹션에서는 언리얼 엔진 5에서 다양한 비헤이비어 트리(Behavior Tree) 에셋을 생성하는 방법을 설명합니다.
비헤이비어 트리 생성
비헤이비어 트리 는 본질적으로 AI의 프로세서로서, 각종 결정을 내리고 그 결과를 바탕으로 다양한 분기를 실행할 수 있습니다. 비헤이비어 트리 는 콘텐츠 드로어(Content Drawer) 안에서 다음 방식으로 생성합니다.
+추가(+Add) 버튼을 클릭하고 고급 에셋 생성(Create Advanced Asset) 아래의 인공 지능(Artificial Intelligence) 과 비헤이비어 트리(Behavior Tree) 를 선택합니다.
그러면 새 비헤이비어 트리 에셋이 콘텐츠 드로어 에 추가되며, 이름을 지을 수 있습니다.
또는 우클릭 컨텍스트 메뉴에서 +추가 > 인공 지능 > 비헤이비어 트리 를 선택할 수도 있습니다. **
블랙보드 생성
블랙보드(Blackboard) 에셋은 AI의 두뇌로 생각할 수 있으며, 비헤이비어 트리 가 결정을 내리는 데 사용하는 키(Key) 값을 저장합니다. 블랙보드 에셋은 다음 방법으로 생성할 수 있습니다.
+추가(Add) 버튼을 클릭한 후 고급 에셋 생성(Create Advanced Asset) > 인공 지능(Artificial Intelligence) > 블랙보드 를 선택합니다.
그러면 새 블랙보드 에셋이 콘텐츠 드로어 에 추가되어 원하는 대로 이름을 지을 수 있습니다.
비헤이비어 트리 내부에 블랙보드를 생성하는 방법도 있습니다.
툴바의 비헤이비어 트리 에디터 에서 새 블랙보드(New Blackboard) 버튼을 클릭합니다.
이렇게 해도 콘텐츠 드로어 에 새 블랙보드 에셋이 생성됩니다.
비헤이비어 트리 태스크 생성
태스크(Task) 는 특정 위치로 이동하거나 무언가를 향해 회전하는 등 AI가 취하게 하려는 '액션'입니다.
최적화가 중요한 경우, 블루프린트 비헤이비어 트리 태스크를 네이티브 비헤이비어 트리 태스크로 변경하는 편을 고려하는 것이 좋습니다.
기존 태스크 를 사용할 수 있을 뿐 아니라, 자신만의 로직을 갖는 커스텀 태스크 를 생성할 수도 있습니다.
비헤이비어 트리 에디터 내의 툴바에서 새 태스크(New Task) 버튼을 클릭합니다.
그러면 태스크 로직을 제공할 수 있는 BTTask_BlueprintBase 클래스의 새 블루프린트 가 열립니다.
콘텐츠 드로어 의 비헤이비어 트리 에셋과 동일한 위치에 태스크 블루프린트(Task Blueprint) 가 생성됩니다.
비헤이비어 트리 에디터 에서 새 태스크 를 생성할 때마다 콘텐츠 드로어 로 가서 에셋의 디폴트 이름 대신 다른 이름으로 변경하는 것이 좋습니다.
새 태스크 를 생성할 때 기존 비헤이비어 트리 태스크 를 드롭다운 메뉴에서 선택하여 기능을 상속받을 부모 클래스(Parent Class) 로 사용할 수 있습니다.
비헤이비어 트리 데코레이터 생성
조건식으로도 알려져 있는 데코레이터(Decorator) 는 비헤이비어 트리 에서 노드에 어태치하여 트리 내의 분기 또는 단일 노드가 실행 가능한지 결정하는 데 사용됩니다. 비헤이비어 트리 에는 사용할 수 있는 디폴트 데코레이터 가 일부 준비되어 있지만, 커스텀 데코레이터를 생성할 수도 있습니다.
비헤이비어 트리 에디터 내의 툴바에서 새 데코레이터(New Decorator) 버튼을 클릭합니다.
그러면 데코레이터 로직을 제공할 수 있는 BTDecorator_BlueprintBase 클래스가 열립니다.
콘텐츠 드로어 의 비헤이비어 트리 에셋과 동일한 위치에 데코레이터 블루프린트(Decorator Blueprint) 가 생성됩니다.
비헤이비어 트리 에디터 에서 새 데코레이터 를 생성할 때마다 콘텐츠 드로어 로 가서 에셋의 디폴트 이름 대신 다른 이름으로 변경하는 것이 좋습니다.
새 데코레이터 를 생성할 때 기존 비헤이비어 트리 데코레이터 를 드롭다운 메뉴에서 선택하여 기능을 상속받을 부모 클래스 로 사용할 수 있습니다.
비헤이비어 트리 서비스 생성
서비스(Service) 는 컴포짓(Composite) 노드에 어태치되어 분기가 실행되는 동안 정의된 빈도로 실행됩니다. 이 노드는 종종 블랙보드 를 확인하고 업데이트하는 데 사용되며, 다른 비헤이비어 트리(Behavior Tree) 시스템의 전통적인 병렬(Parallel) 노드를 대체합니다. 디폴트로 사용할 수 있는 서비스 가 준비되어 있기는 하지만, 커스텀 서비스 를 생성하여 비헤이비어 트리 의 실행 방식을 결정하는 데 보조적으로 사용하는 경우가 많습니다.
최적화가 중요한 경우, 블루프린트 비헤이비어 트리 서비스를 네이티브 비헤이비어 트리 서비스로 변경하는 것도 고려하는 것이 좋습니다.
비헤이비어 트리 에디터 내의 툴바에서 새 서비스(New Service) 버튼을 클릭합니다.
그러면 서비스 로직을 제공할 수 있는 BTService_BlueprintBase 클래스가 열립니다.
콘텐츠 드로어 의 비헤이비어 트리 에셋과 동일한 위치에 서비스 블루프린트(Service Blueprint) 가 생성됩니다.
비헤이비어 트리 에디터 에서 새 서비스 를 생성할 때마다 콘텐츠 드로어 로 가서 에셋의 디폴트 이름 대신 다른 이름으로 변경하는 것이 좋습니다.
새 서비스 를 생성할 때 기존 비헤이비어 트리 서비스(Behavior Tree Service) 를 드롭다운 메뉴에서 선택하여 기능을 상속받을 부모 클래스 로 사용할 수 있습니다.
블랙보드 편집
보통은 블랙보드 를 비헤이비어 트리 보다 먼저 생성하게 되는데, 비헤이비어 트리 가 결정을 내리는 프로세스에서 블랙보드 를 참조하기 때문입니다. 필요하다면 나중에 언제든지 키 를 추가할 수도 있습니다. 블랙보드 에셋은 콘텐츠 드로어 에서 에셋을 더블클릭하여 블랙보드 에디터 를 실행하는 방법으로 편집할 수 있습니다.
블랙보드 가 할당된 비헤이비어 트리 를 편집하고 있는 경우, 창 우측 상단의 탭을 클릭하여 블랙보드 로 전환할 수 있습니다.
블랙보드 디테일(Blackboard Details) 패널에서 다른 블랙보드 를 부모 로 할당하고 키 를 상속받을 수 있습니다.
블랙보드 창에서 새 키(New Key) 버튼을 클릭하여 키 를 추가할 수 있습니다.
키 로 저장될 수 있는 변수 타입에 대한 자세한 설명은 블루프린트 변수 를 참고하세요.
키 가 생성되면 블랙보드 디테일 패널에서 키 와 관련된 프로퍼티를 정의할 수 있습니다.
프로퍼티 |
설명 |
---|---|
엔트리 이름(Entry Name) |
사용자 정의 키 이름입니다. |
엔트리 설명(Entry Description) |
해당 블랙보드 키에 대한 설명을 적을 수 있습니다. |
키 타입(Key Type) |
키를 생성할 때 정의되며, 오브젝트(Object) 및 클래스(Class) 키는 특정 클래스 를 정의하는 추가적인 옵션을 제공합니다. 이를 통해 오브젝트(액터 등)에서 상속받는 모든 타입의 데이터를 저장할 수 있습니다. |
동기화된 인스턴스(Instance Synced) |
키가 블랙보드의 모든 인스턴스에서 동기화될지 여부를 결정하는 데 사용됩니다. |
키의 이름을 변경 하거나 키를 삭제 하려면 키 를 우클릭하여 컨텍스트 메뉴를 열거나, 키 를 선택하고 F2 나 Delete 를 누릅니다.
클래스 및 오브젝트 키의 경우 키 타입 옆의 작은 삼각형을 클릭하여 어떤 베이스 액터 클래스를 사용할지 정의할 수 있습니다.
열거형(Enum) 키의 경우 키 타입 옆의 작은 삼각형을 클릭하여 추가적인 프로퍼티를 설정할 수 있습니다.
프로퍼티 |
설명 |
---|---|
열거형 타입(Enum Type) |
사용하도록 할당된 열거형입니다. |
열거형 이름(Enum Name) |
C++ 코드로 정의된 열거형 이름으로, 열거형 타입 에 할당된 에셋보다 우선합니다. |
열거형 이름 유효 여부(Is Enum Name Valid) |
열거형 이름 오버라이드가 유효하고 가능하며 활성화된 경우 설정합니다. |
비헤이비어 트리 편집
비헤이비어 트리 를 편집하려면 비헤이비어 트리 에셋을 열어야 합니다.
콘텐츠 드로어 에서 비헤이비어 트리 에셋을 더블클릭하여 비헤이비어 트리 모드(Behavior Tree Mode) 로 들어갑니다.
또는 다음과 같이 비헤이비어 트리 모드 로 전환합니다.
비헤이비어 트리 에디터 우측 상단의 비헤이비어 트리 탭을 클릭합니다.
비헤이비어 트리 모드 로 전환하려면 현재 실행 중인 비헤이비어 트리 에셋이 있고, 전환 전에는 블랙보드 모드(Blackboard Mode) 였어야 합니다.
블랙보드 할당
비헤이비어 트리 가 블랙보드 에 액세스하려면 블랙보드 에셋을 할당해야 합니다.
그래프의 루트(Root) 노드를 선택하거나 모든 노드의 선택을 취소한 후 디테일(Details) 패널에서 원하는 블랙보드 에셋(Blackboard Asset) 을 설정합니다.
블랙보드 를 할당한 후에는 블랙보드 패널이 관련된 블랙보드 키(Blackboard Keys) 로 업데이트됩니다.
노드 작업
컴포짓 또는 태스크 를 비헤이비어 트리 그래프에 추가하려면 그래프를 우클릭하여 컨텍스트 메뉴를 열고 원하는 노드를 선택하면 됩니다.
비헤이비어 트리 의 루트 노드에는 컴포짓 노드만 어태치할 수 있습니다.
또한 노드를 드래그하여 컨텍스트 메뉴에서 추가할 노드를 선택할 수도 있습니다.
그래프에서 노드를 제거하려면 노드 한 개 또는 여러 개를 선택한 뒤 Delete 를 누르거나 우클릭하고 삭제(Delete) 를 선택합니다.
노드를 서로 연결하려면 한 노드의 출력 핀에서 다른 노드의 입력 핀으로 좌클릭하고 드래그합니다.
비헤이비어 트리 에서 노드를 연결하려면 오직 출력 핀에서 입력 핀으로만 연결해야 합니다. 입력 핀에서 출력 핀으로 연결할 수는 없습니다.
노드의 연결을 해제하려면 노드를 우클릭하거나 여러 노드를 선택하고 원하는 모든 핀 링크 끊기(Break All Pin Link) 를 선택합니다.
모든 핀 링크 끊기 로는 핀이 연결된 링크 한 개나 여러 개를 끊을 수 있습니다. 다음 링크 끊기...(Break link to...) 는 지정된 노드로의 연결을 끊습니다.
입력 핀이나 출력 핀을 Alt+좌클릭하여 연결을 끊을 수도 있습니다.
노드를 편집하려면 노드를 하나 선택하고 디테일 패널에서 프로퍼티를 조정하면 됩니다.
선택한 노드와 그 세팅을 복사하고 붙여넣을 수도 있습니다. 그러려면 노드를 한 개 선택하거나 선택 박스를 드래그하여 여러 개 선택하고 Ctrl+C(복사), Ctrl+V(붙여넣기)를 누르면 됩니다.
노드 데코레이터 및 서비스
노드 컨텍스트 메뉴를 사용하여 데코레이터 또는 서비스 를 비헤이비어 트리 그래프의 노드에 추가할 수 있습니다.
그러려면 컴포짓 또는 태스크 노드를 우클릭하고 노드에 추가하고 싶은 데코레이터 또는 서비스 를 선택합니다.
노드에서 데코레이터 또는 서비스 를 제거하려면 데코레이터 또는 서비스 를 선택하고 Delete 를 누르거나 우클릭 컨텍스트 메뉴를 사용합니다.
노드에 어태치된 데코레이터 또는 서비스 를 편집하려면 먼저 데코레이터 또는 서비스 를 선택하고 디테일 패널에서 원하는 프로퍼티를 조정할 수 있습니다.
노드에 추가된 컴포짓 데코레이터 는 열어서 편집할 수 있습니다.
컴포짓 데코레이터를 열려면 컴포짓 데코레이터 를 더블클릭하여 부울 값(True 또는 False)을 반환하는 그래프를 엽니다.
이미지를 클릭하면 최대 크기로 볼 수 있습니다.
툴바에서 생성된 태스크 , 데코레이터 , 서비스 는 블루프린트 에서 실행하여 편집할 수 있습니다.
커스텀 태스크 , 데코레이터 , 서비스 를 생성하고 그래프에 추가한 후에는 더블클릭으로 실행하여 편집할 수 있습니다.
콘텐츠 드로어 에서도 모든 커스텀 태스크 , 데코레이터 , 서비스 를 실행할 수 있습니다.
커스텀 태스크 , 데코레이터 , 서비스 를 콘텐츠 드로어 에서 더블클릭하면 블루프린트 에서 실행하여 편집할 수 있습니다.
또한 데코레이터 또는 서비스 를 복사하여 다른 노드에 붙여넣을 수도 있습니다.
데코레이터 또는 서비스를 선택한 뒤 Ctrl+C를 눌러 복사하고, Ctrl+V를 눌러 다른 노드에 붙여넣으면 됩니다.