행동 트리 용어 설명
blocking (블로킹)
행동(behaviour)은 가끔 '블로킹' 행동이라고 불립니다. 기술적으로는 행동의 실행(틱 부분)은 논블로킹이어야 하지만, 'RUNNING'에서 'FAILURE/SUCCESS'로의 진행이 한 번 이상의 틱이 걸릴 때, 그 행동 자체를 블로킹이라고 합니다. 간단히 말해, 블로킹 == RUNNING 입니다.
data gathering (데이터 수집)
비동기적으로 블랙보드에 도착하는 이벤트, 알림 또는 들어오는 데이터를 캐싱하는 것입니다. 이는 복잡한 시스템 내에 존재하는 행동 트리에서 꽤 일반적인 관행입니다.
대부분의 경우, 데이터 수집은 트리 외부에서 수행되거나, 트리 틱의 앞부분에서 나머지 트리 틱보다 앞선 병렬(parallel) 아래에서 수행됩니다. 이렇게 하면 이후의 행동들이 일정하고 일관된 데이터 세트를 가지고 작업할 수 있습니다. 들어오는 데이터가 비동기적으로 도착하지 않더라도, 이는 개념적으로나 조직적으로 유용합니다.
flying spaghetti monster (날아다니는 스파게티 괴물)
그 자체로 심각한 종교적 존재이지만(파스타파리아니즘 참조), 코드가 관리되지 않으면 영적인 날아다니는 스파게티 괴물이 될 수 있다고 상상하기 쉽습니다.
guard (가드)
가드는 시퀀스의 시작 부분에 있는 행동으로, 특정 조건(예: 배터리가 부족한지?)을 확인합니다. 확인이 성공하면, 나머지 작업 시퀀스로 가는 문이 열립니다.
ticking (틱킹)
행동과 그 트리의 핵심 기능은 틱하는 방식에 있습니다. 틱은 단순히 실행 슬라이스로, 함수를 한 번 호출하거나 제어 프로그램에서 루프를 한 번 실행하는 것과 유사합니다.
행동이 틱할 때, 변수를 확인하거나 외부 동작을 트리거/모니터링/결과를 반환하는 작은, 논블로킹 코드 청크를 실행합니다.
행동 트리가 틱할 때, 행동들을 순회하며(트리의 루트에서 시작), 각 행동을 틱하고, 결과를 받아 트리 순회가 취할 방향에 대한 결정을 내립니다. 이것이 트리의 결정 부분입니다. 순회가 루트로 돌아오면 틱이 끝납니다.
틱이 끝나면... 숨을 돌릴 수 있습니다! 이 공간에서 CPU 사용을 피하기 위해 일시 중지하거나, 모니터링 프로그램에 통계를 보내거나, 기본 블랙보드(데이터)를 조작할 수 있습니다. 어떤 시점에서도 트리의 순회가 실행에 빠지지 않습니다 - 그저 들어갔다가 나왔다가 커피를 마시러 잠시 멈추는 것입니다. 이것은 정말 놀랍습니다 - 이것 없이는 잠금과 스레드의 동시 혼란이 될 것입니다.
항상 행동의 실행이 가벼워야 한다는 점을 명심하세요. 여기서는 병렬화가 없으며 틱 시간을 작게 유지해야 합니다. 트리는 순전히 의사 결정에 관한 것이어야 하며, 실제 블로킹 작업을 수행해서는 안 됩니다. 모든 블로킹 작업은 다른 곳에서 발생해야 하며, 행동은 단순히 그 작업의 시작/모니터링 및 결과 캐치를 담당해야 합니다.