유한 상태 기계(Finite State Machine, FSM)
여러 가지 상태를 가지고 있고, 특정 이벤트에 의해 상태가 변할 수 있는 추상적인 모델.
이는 시스템이 특정 상태에서 어떻게 행동해야 하는지를 정의하고 제어하는 데 사용.
구성 요소
상태 (States): 시스템이 가질 수 있는 여러 가지 상태를 나타냄.
각 상태는 시스템이 특정 상태에서 수행하는 동작을 정의.
이벤트 (Events): 상태 변화를 일으키는 외부 또는 내부에서 발생하는 사건을 나타냄.
이벤트가 발생하면 시스템은 현재 상태에서 새로운 상태로 전이.
전이 (Transitions): 상태 변화를 나타내며, 특정 상태에서 특정 이벤트가 발생하면 다른 상태로 전이.
각 전이는 조건에 따라 발생.
초기 상태 (Initial State): 시스템의 시작점을 나타내는 상태로, 초기 상태에서 시작하여 이벤트에 따라 다른 상태로 전이.
종료 상태 (Final State): 어떤 동작이 완료되었을 때 시스템이 도달하는 상태로, 종료 상태에 도달하면 시스템은 완료.
행동 트리
행동 트리는 주로 게임 AI 시스템에서 사용되며, FSM(유한 상태 기계) 및 HFSM(계층적 유한 상태 기계)와 함께 게임 캐릭터의 행동을 효과적으로 제어하는 데 활용.
FSM과 HFSM의 한계
FSM은 상태와 전이로 구성되어 있어 특정 상태에서의 동작을 정의하고, 전이에 의해 상태가 변경.
HFSM은 FSM을 그룹화하여 계층화하며 상태의 재사용성을 높임.
그러나 HFSM도 상태를 모듈화하는 데 제한이 있음.
행동 트리의 등장
행동 트리는 복잡한 상황에서의 게임 AI를 모델링하기 위한 디자인 패턴으로 등장.
BT는 트리 구조를 가지며, 각 노드는 특정 동작 또는 조건을 나타냄.
BT 노드 종류
스택 구조와 실행 흐름
행동 트리는 스택 구조를 사용하여 동작하며, Action 노드의 실행 결과에 따라 스택을 조작.
스택을 통해 실행 흐름을 관리하며 동적인 상황에 대응할 수 있음.
Conditional Aborts(조건부 취소)
동작 중인 노드를 외부에서 강제로 중단시키는 방법으로, Composite 노드에 구현되어 있음.
종료 조건을 감시하여 동적으로 실행 흐름을 제어.
Decorator Task(장식자 태스크)
조건을 나타내는 데 사용되며, 자식 노드의 실행을 제어하고 확장성을 높임.
Probability, TimeOut 등이 사용.
Unity에서의 활용
Unity에서는 Behavior Designer, NodeCanvas 등의 에셋을 통해 행동 트리를 구현할 수 있음.
이를 통해 게임 캐릭터의 지능적인 행동을 쉽게 제어.
행동 트리는 복잡한 행동 패턴을 나타내기 위한 구조이며,많지 않은 행동들을 정의하는데에는 새로운 상태나 동작을 추가하거나 기존의 것을 간단하게 수정하기 편하고 이미 배운적이 있는 상태머신을 사용하였습니다.
상태머신은 시스템이 다양한 상태에 있을 때 각 상태에서 어떤 동작이 발생하는지 명확하게 모델링할 수 있습니다. 간단한 행동 로직을 구성할 것이므로 상태 머신이 디버깅 및 코드 가독성 측면에서 더 편할 수 있다고 느꼈습니다.