Behavior Tree 알아보기

알감자·2022년 3월 15일
0

게임공부

목록 보기
1/22
post-thumbnail

Behavior Tree

이름에서 알 수 있듯이 행동 트리는 트리(tree)를 사용하여 동작을 코드화하는 방법이다. 게임 키트에서 적에 대한 AI의 행동과 보스 전투 순서를 제어하는 데 사용된다.

  • DAG(Directed Acyclic Graph, 방향성 비순환 그래프)
  • 평가 시 각 노드는 깊이 우선 탐색

Theory

게임이 업데이트될 때마다 트리는 "ticked"되는데, 이는 루트의 각 자식 노드를 통과하며 노드에 자식 노드가 있는 경우 더 아래로 내려가는 등의 의미이다.

각 노드는 연관된 동작들이 있으며, 세가지 상태 중 하나를 부모 노드에 반환한다.

  • Success : 노드가 업무를 성공적으로 끝마쳤을 때
  • Failure : 노드가 업무에 실패했을 때
  • Continue : 노드가 아직 업무를 끝내지 못했을 때

반환된 상태는 각 부모 노드마다 다르게 사용된다.

For example

  • Selector는 만약 현재 자식 노드가 실패나 성공을 반환할 경우 다음 자식 노드를 활성화하고 만약 Continue를 반환할 경우 현재 자식 노드를 활성 상태로 유지한다.

  • 테스트 노드가 자식 노드를 호출하여 테스트가 참이면 자식 노드를 반환하고, 테스트가 실패하면 자식 노드를 호출하지 않고 실패를 반환한다.



Nodes List

Sequence

자식 노드를 차례로 실행한다. 자식 노드가 반환되면 :

  • Success : 시퀀스가 다음 프레임에서 다음 자식 노드를 선택한다.
  • Failure : 시퀀스가 다음 프레임에서 첫 번째 자식 노드로 돌아간다.
  • Continue : 시퀀스가 다음 프레임에서 해당 자식 노드를 다시 호출한다.

RandomSequence

호출될 때마다 자식 노드의 리스트에서 임의의 자식 노드를 실행한다. 생성자에서 int 배열로 각 자식 노드에 적용할 가중치 리스트(list of weights)를 지정하여 일부 자식 노드를 더 쉽게 선택할 수 있다.

Selector

하나가 성공을 반환할 때까지 모든 자식 노드를 실행하고 나서 남은 자식 노드들을 실행하지 않고 종료한다. 만약 모든 노드가 성공을 반환하지 못한다면 이 노드는 실패를 반환한다.

Call

지정된 함수를 호출한다. 이 함수는 항상 성공을 반환한다.

If

지정된 함수를 호출하면

  • 만약 true가 반환되면, 현재 활성된 자식 노드를 호출하고 상태를 반환한다.
  • 그렇지 않으면 자식 노드를 호출하지 않고 실패를 반환한다.

While

주어진 함수가 true를 반환하지 않는 한 Continue를 반환한다. (따라서 다음 프레임에 tree가 ticked 되면 이전 노드들을 모두 진행하지 않고 그 노드에서 다시 시작된다.)
자식 노드는 차례로 실행된다.
함수가 false를 반환하고 loop가 파손되면 실패를 반환한다.

Condition

이 노드는 주어진 함수가 true를 반환하면 성공을 반환하고, false를 반환하면 실패를 반환한다.
자식 노드의 결과에 따라 다른 노드 (e.g Sequence, Selector)와 연결된 경우 유용하다.

Repeat

모든 자식 노드들을 지정된 횟수만큼 연속적으로 실행한다.
count에 도달할 때까지 Continue를 반환하고, 여기서 성공이 반환된다.

Wait

지정된 시간에 도착할 때까지(처음 호출될 때 시작) Continue를 반환하고, 그러면 성공이 반환된다. (?)

Trigger

지정된 애니메이터에서 트리거 설정(또는 마지막 인수가 false로 설정된 경우 트리거 설정 해제)을 허용한다. 항상 성공을 반환한다.

SetBool

지정된 애니메이터에서 부울 파라미터의 값을 설정할 수 있다. 항상 성공을 반환한다.

SetActive

지정된 GameObject를 활성/비활성으로 설정한다. 항상 성공을 반환한다.

출처 : https://learn.unity.com/tutorial/2d-game-kit-advanced-topics#5c7f8528edbc2a002053b779





더 공부해야할 부분





출처 : http://ndcreplay.nexon.com/NDC2018/sessions/NDC2018_0082.html

0개의 댓글