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 |