가정)


enum UnitStates {

     Idle,

      Move,

      Fall,

      ...

}

var current_state:int = UnitState.Idle

func _physics_process(delta:float) -> void:

   match current_state:

      UnitState.Idle:

         ....

      UnitState.Move:

         ....


   move_and_slide()


이런식으로 상태머신을 피직스 프로세스 안에 만들어 놓을 때, 아래와 같은 문제점들이 발생됨.


1. 해당 상태로 진입할 시에 한 번 실행되는 함수의 부재.


2. 스크립트 내에 처리할 게 많다면 다음 상태로 넘어갔음에도 이전 상태의 코드를 읽고 있는 문제


3. 핑퐁 및 무한루프를 하나의 스크립트 내에서 제어하기 매우 힘들다는 문제


 해당 문제를 해결하기 위한 해결책으로는 다음과 같다.


1) 

 위 형태와 같이 노드를 통하여 제어한다. 고도엔진에서는 노드가 스크립트에 의해 관리 및 제어되기에 적극적으로 추천되는 형태이다.

 https://www.gdquest.com/tutorial/godot/design-patterns/finite-state-machine/


2) 각 상태에서 공통적으로 작동하는 명령을 함수로 묶어 관리한다. 클래스상속을 활용하면 스크립트를 정리하고 제어하는 데에 도움이 많이 된다.


3) 부울 함수로 매치문 실행 관리 / 해당 과정 또한 버그 없이 작업하기 매우 복잡하므로 assert()를 활용하면 보다 쉽게 디버깅 할 수 있다.