유니티 소스코드

SFM(유한상태기계) 소스코드

서보훈 2025. 3. 26. 09:01
public abstract class State
{
    //현재 상태를 관리하는 유한상태기계
    protected StateMachine stateMachine;
    //상태를 가지는 캐릭터
    protected Character character;

    public State(StateMachine stateMachine, Character character)
    {
        this.stateMachine = stateMachine;
        this.character = character;
    }

    public abstract void OnEnter();

    public abstract void OnExit();

    public abstract void OnUpdate();

    public abstract void OnFixedUpdate();
}

 

public class StateMachine
{
    //현재 상태
    private State currentState;
    public State CurrentState => currentState;

    public void ChangeState(State newState)
    {
        //상태 변경
        currentState?.OnExit();
        currentState = newState;
        currentState?.OnEnter();
    }

    public void StateUpdate()
    {
        currentState?.OnUpdate();
    }

    public void StateFixedUpdate()
    {
        currentState.OnFixedUpdate();
    }
}

 

사용시 상속하여 대응되는 상태, FSM 을 만들어서 사용

public class EnemyIdleState : State
{
    public EnemyIdleState(StateMachine stateMachine, Character character) : base(stateMachine, character)
    {
    }

    public override void OnEnter()
    {
        
    }

    public override void OnExit()
    {
        
    }

    public override void OnFixedUpdate()
    {
        
    }

    public override void OnUpdate()
    {
        
    }
}

 

public class EnemyStateMachine : StateMachine
{
    public EnemyIdleState idleState {  get; private set; }

    public EnemyStateMachine(Character enemy)
    {
        idleState = new EnemyIdleState(this, enemy);
    }
}

 

캐릭터 또한 기반 캐릭터를 상속시켜서 사용하는것이 좋은

public class Character : MonoBehaviour
{
    private EnemyStateMachine stateMachine;

    private void Awake()
    {
        stateMachine = new EnemyStateMachine(this);
    }
}

'유니티 소스코드' 카테고리의 다른 글

리소스 매니저 소스코드  (0) 2025.03.27
싱글톤 패턴 소스코드  (0) 2025.03.24