프로그래밍 공부
작성일
2023. 12. 1. 15:33
작성자
WDmil
728x90

여러 상태(State)와 각 상태간의 전이(Transition)으로 이루어진 모델방법 이다.

 

FSM은 객체의 행동을 여러 상태로 나누어 표현하고, 상태 간 전이에 따라 객체의 동작이 변경된다.

 

이러한 구분방식은 게임개발시 캐릭터의 행동, NPC의 행동, 게임 상태등을 관리하는데 좋다.

 


FSM은 3가지 구성요소로 정의된다.

  1. 상태(State)
    • 객체가 취할 수 있는 다양한 동작 또는 상태를 나타낸다.
    • 예를들어. 이동, 공격, 대기 등을 말할 수 있다.
  2. 이벤트(Event)
    • 각 상태간 전이를 일으키는 외부, 또는 내부에서 발생하는 사건 또는 조건을 말한다.
    • 예를들어, " 이동한 후 도착 " 이벤트가 발생하면, 이동 -> 도착 으로 상태가 전이된다.
  3. 전이(Transition)
    • 상태간의 전이를 나타내며, 특정 이벤트가 발생했을 때 어떤 상태로 이동할지 정의한다.

 

이러한 구분방법으로, 얻게되는 장점은 다음과 같다.

 

  1. 가독성과 유지보수 향상
    • 각각 상태로 나누어 관리함으로 구분짓기 편하다.
  2. 상태전의의 명확한 정의
    • 어떤 조건, 또는 이벤트에 의해 전이될지 명확하게 정의할 수 있다.
  3. 코드 재사용
    • 동일 형태에서 여러 객체에 사용 가능함으로 중복코드를 최소화 할 수 있다.
/ 상태 정의
enum CharacterState {
    IDLE,
    WALKING,
    RUNNING,
    JUMPING
};

class Character {
private:
    CharacterState currentState;

public:
    // 이벤트에 따른 상태 전이
    void HandleEvent(CharacterEvent event) {
        switch (event) {
            case MOVE_FORWARD:
                currentState = WALKING;
                break;
            case MOVE_BACKWARD:
                currentState = WALKING;
                break;
            case JUMP:
                currentState = JUMPING;
                break;
            // 다른 이벤트 처리
        }
    }

    // 현재 상태에 따른 동작 실행
    void Update() {
        switch (currentState) {
            case IDLE:
                // 아무 동작도 하지 않음
                break;
            case WALKING:
                // 걷기 동작 수행
                break;
            case RUNNING:
                // 달리기 동작 수행
                break;
            case JUMPING:
                // 점프 동작 수행
                break;
        }
    }
};

대충 위와같이 사용된다고 이해하면 된다.

 

정의된 상태에 따라 Update()에서 필요한 동작상태로 구분지어 동작한다.

 

728x90

'컴퓨터 용어 정리' 카테고리의 다른 글

클래스 다이어그램(Class Diagram)  (0) 2023.12.06
행동 객체화 방법 [ FSM 응용 ]  (0) 2023.12.01
DirectX Instancing  (0) 2023.11.28
20231109 27일차 Font, Frustum  (0) 2023.11.09
Frustum 기법  (0) 2023.11.09