본문 바로가기

Unreal/득우짱의 언리얼

Chapter12 AI 컨트롤러와 비헤이비어 트리

1. 엔진버전 4.20 버전부터 내비게이션 시스템 구조가 변경됐다.( 말이 많더니 계속 바뀌는중인듯!)

- PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "UMG", "NavigationSystem"}); 모듈

- #include "NavigationSystem.h" #include "Blueprint\AIBlueprintHelperLibrary.h" 참조 추가

-UAIBlueprintHelperLibrary::SimpleMoveToLocation(this, NextLocation.Location); 블루프린트 함수로 이동함



2. 비헤이비어 트리는 NPC가 해야 할 행동을 분석하고 우선순위가 높은 행동부터 NPC가 실행할 수 있도록 트리 구조로 설계하는 기법이다.


3. 블랙보드는 인공지능의 판단에 사용하는 데이터 집합을 의미한다. NPC의 의사 결정은 블랙보드에 있는 데이터를 기반으로 진행된다.

  비헤이비어 트리는 블랙보드 데이터에 기반해 설계한 비헤이비어 트리의 정보를 저장한 애셋이다.언리얼 에디터에서는 비헤이비어 트리를 시각화해 저장할 수 있도록 편집 기능을 제공한다. 


5. 태스크는 독립적으로 실행될 수 없고 반드시 컴포짓 노드를 거쳐 실행돼야 한다. 컴포짓 노드에는 대표적으로 셀렉터와 시퀀스가 있다.

태스크들이 False 결과가 나올 때까지 왼쪽에서 오른쪽으로 태스크를 계속 실행하는 시퀀스 컴포짓


- Wait - 폰에게 지정한 시간 동안 대기하라는 명령


6. 비헤이비어 트리는 태스크를 실행할 때 태스크 클래스의 ExecuteTask라는 멤버를 실행한다. ExecuteTask 함수는 다음의 셋 중 하나의 값을 반환해야 한다.

- Aborted : 태스크 실행 중에 중단됐다. 결과적으로 실패

- Failed : 태스크를 수행했지만 실패했다.

- Succeeded : 태스크를 성공적으로 수행했다.

- InProgress : 태스크를 계속 수행하고 있다. 태스크 실행 결과는 향후 알려줄 예정이다.


ExecuteTask 함수의 실행 결과에 따라 컴포짓 내에 있는 다음 태스크를 계속 수행할지, 중단될지가 결정된다. 현재 사용중인 시퀀스 컴포짓은 자신이 속한 태스크를 실패할때까지 계속 실행하는 성징을 가진다.


7. 서비스 노드는 독립적으로 동작하지 않고 컴포짓 노두에 부착되는 노드이다. 또한 서비스 노드는 해당 컴포짓에 속한 태스크들이 실행되는 동안 반복적인 작업을 실행하는 데 적합하다. 플레이어를 감지하는 서비스 노드를 새로 생성하고 이를 셀렉터 컴포짓에 추가하면 비헤이비어 트리는 플레이어를 감지하는 루틴을 계속 반복한다.


8. 블랙보드의 값을 기반으로 특정 컴포짓의 실행 여부를 결정하는 데코레이터 노드