20250526 - AI

이바퀴
|2025. 5. 26. 14:02
728x90
반응형

📕오늘의 공부 주제


FSM, UtilityAI, GOAP(Goal of Action Planning), Behavior Tree

친구에게 들은 내용을 정리하고자 한다.

🤔Why?


경력자인 친구가 있어 몬스터 AI를 구현하는게 어렵게 느껴진다 등 여러 이야기를 하다보니, AI를 만들때도 여러가지 방법이 있다고 얘기를 해주며 듣게 되었다.

해당 부분을 공부를 좀 해보고자 한다.

📖오늘의 공부 내용


SimpleFSM

  • switch-case, enum을 이용한 단순 구조

    장점

    구현이 쉬움

    단점

    어떤 상태로 들어갈때와 나갈 때의 행동 정의가 어려움(코드 복잡도 상승)
    상태의 개수가 늘어나면 코드의 복잡도 증가(수정 어려움)

ex)


public enum State { Idle = 0, Walk, Run, Attack }
public State state;
public void UpdateState()
{
    switch(state)
    {
        case State.Idle :
            Debug.Log("대기");
            break;
        case State.Walk :
            Debug.Log("걷기");
            break;
        case State.Run :
            Debug.Log("달리기");
            break;
        case State.Attack :
            Debug.Log("공격");
            break;
    }
}

public void ChangeState(State state)
{
    this.state = state;
}

출처 - https://www.youtube.com/watch?v=4rmf0S885X4&ab_channel=%EA%B3%A0%EB%B0%95%EC%82%AC%EC%9D%98%EC%9C%A0%EB%8B%88%ED%8B%B0%EB%85%B8%ED%8A%B8

StatePattern을 이용한 FSM

ex)

public interface IState
{
    public void Enter();
    public void Exit();
    public void HandleInput();
    public void Update();
    public void PhysicsUpdate();
}

public abstract class StateMachine
{
    protected IState currentState;

    public void ChangeState(IState newState)
    {
        currentState?.Exit();

        currentState = newState;

        currentState?.Enter();
    }

    public void HandleInput()
    {
        currentState?.HandleInput();
    }

    public void Update()
    {
        currentState?.Update();
    }

    public void PhysicsUpdate()
    {
        currentState?.PhysicsUpdate();
    }
}

장점

  • 각 상태가 독립 클래스로 분리되어 책임이 명확함
  • 확장성 높음: 새로운 상태 추가가 쉬움
  • 전이 로직이 명확하여 초기화/정리작업이 용이
  • 협업 시 역할 분담이 쉬움 (상태별 파일 구분)

단점

  • 간단한 FSM에는 과도한 구조
  • 클래스 수 증가로 파일 관리 부담
  • 상태 간 의존이 생기면 복잡도 증가
  • GC 비용 발생 가능 → 상태 객체 재사용 필요
    출처 - https://seoksii.tistory.com/73
728x90
반응형

'프로그래밍 공부 > TIL' 카테고리의 다른 글

2025-06-30 TIL  (0) 2025.06.30
Kata - RGB To Hex Conversion  (0) 2025.06.02
20250521 - 코테 문제풀이  (0) 2025.05.21
20250520 - 움직이는 플랫폼  (0) 2025.05.20
20250519 - 점프대 구현  (0) 2025.05.19