이름에서 알 수 있듯이 행동 트리는 트리(tree)를 사용하여 동작을 코드화하는 방법이다. 게임 키트에서 적에 대한 AI의 행동과 보스 전투 순서를 제어하는 데 사용된다.
게임이 업데이트될 때마다 트리는 "ticked"되는데, 이는 루트의 각 자식 노드를 통과하며 노드에 자식 노드가 있는 경우 더 아래로 내려가는 등의 의미이다.
각 노드는 연관된 동작들이 있으며, 세가지 상태 중 하나를 부모 노드에 반환한다.
반환된 상태는 각 부모 노드마다 다르게 사용된다.
Selector는 만약 현재 자식 노드가 실패나 성공을 반환할 경우 다음 자식 노드를 활성화하고 만약 Continue를 반환할 경우 현재 자식 노드를 활성 상태로 유지한다.
테스트 노드가 자식 노드를 호출하여 테스트가 참이면 자식 노드를 반환하고, 테스트가 실패하면 자식 노드를 호출하지 않고 실패를 반환한다.
자식 노드를 차례로 실행한다. 자식 노드가 반환되면 :
호출될 때마다 자식 노드의 리스트에서 임의의 자식 노드를 실행한다. 생성자에서 int 배열로 각 자식 노드에 적용할 가중치 리스트(list of weights)를 지정하여 일부 자식 노드를 더 쉽게 선택할 수 있다.
하나가 성공을 반환할 때까지 모든 자식 노드를 실행하고 나서 남은 자식 노드들을 실행하지 않고 종료한다. 만약 모든 노드가 성공을 반환하지 못한다면 이 노드는 실패를 반환한다.
지정된 함수를 호출한다. 이 함수는 항상 성공을 반환한다.
지정된 함수를 호출하면
주어진 함수가 true를 반환하지 않는 한 Continue를 반환한다. (따라서 다음 프레임에 tree가 ticked 되면 이전 노드들을 모두 진행하지 않고 그 노드에서 다시 시작된다.)
자식 노드는 차례로 실행된다.
함수가 false를 반환하고 loop가 파손되면 실패를 반환한다.
이 노드는 주어진 함수가 true를 반환하면 성공을 반환하고, false를 반환하면 실패를 반환한다.
자식 노드의 결과에 따라 다른 노드 (e.g Sequence, Selector)와 연결된 경우 유용하다.
모든 자식 노드들을 지정된 횟수만큼 연속적으로 실행한다.
count에 도달할 때까지 Continue를 반환하고, 여기서 성공이 반환된다.
지정된 시간에 도착할 때까지(처음 호출될 때 시작) Continue를 반환하고, 그러면 성공이 반환된다. (?)
지정된 애니메이터에서 트리거 설정(또는 마지막 인수가 false로 설정된 경우 트리거 설정 해제)을 허용한다. 항상 성공을 반환한다.
지정된 애니메이터에서 부울 파라미터의 값을 설정할 수 있다. 항상 성공을 반환한다.
지정된 GameObject를 활성/비활성으로 설정한다. 항상 성공을 반환한다.
출처 : https://learn.unity.com/tutorial/2d-game-kit-advanced-topics#5c7f8528edbc2a002053b779
출처 : http://ndcreplay.nexon.com/NDC2018/sessions/NDC2018_0082.html