오늘의 학습 키워드
Finite State Machine
공부한 내용
Finite State Machine
한 번에 한 개의 상태만 가질 수 있고 다른 상태로 전이가 가능한 모델을 FSM(유한 상태 머신)이라고 부른다.
게임에서는 애니메이션 쪽에서 자주 쓰이게 된다. (Idle <-> Walk <-> Run <-> Attack)
이번에 배웠던 예제에서는 신기한 구조를 가지고 있었는데 각 상태들이 new 생성자를 통하여 상태 머신의 인스턴스를 받아온다는 것이었다.
그리고 각 상태는 IState 인터페이스를 상속받으며 ChangeState로 상태머신의 IState변수 인스턴스를 교체해준다. (상태 전이)
public class PlayerBaseState : IState
{
protected PlayerStateMachine stateMachine;
protected readonly PlayerGroundData groundData;
public PlayerBaseState(PlayerStateMachine playerStateMachine)
{
stateMachine = playerStateMachine;
groundData = stateMachine.Player.Data.GroundData;
}
}
public class PlayerStateMachine : StateMachine
{
// States
public PlayerIdleState IdleState { get; }
public PlayerWalkState WalkState { get; }
public PlayerRunState RunState { get; }
public PlayerJumpState JumpState { get; }
public PlayerFallState FallState { get; }
public PlayerComboAttackState ComboAttackState { get; }
public PlayerStateMachine(Player player)
{
IdleState = new PlayerIdleState(this);
WalkState = new PlayerWalkState(this);
RunState = new PlayerRunState(this);
JumpState = new PlayerJumpState(this);
FallState = new PlayerFallState(this);
ComboAttackState = new PlayerComboAttackState(this);
}
}
public interface IState
{
void Enter();
void Exit();
void handleInput();
void Update();
void PhysicsUpdate();
}
public abstract class StateMachine
{
protected IState currentState;
public void ChangeState(IState newState)
{
currentState?.Exit();
currentState = newState;
currentState?.Enter();
}
}
오늘의 회고
오늘은 상태 머신에 대해서 배웠다. 어렵지만 그림으로 정리하니 이해하기 좀 더 쉬워진 것 같다. 저 구조 이후에는 BaseState를 상속받은 각 상태에서 조건만 추가하여 다음 상태로 넘어가게 구현하면 된다. 처음 구조짤 때는 어렵지만 그냥 한 곳에서 짜는 것보다 유지 보수하기 쉬워보인다.
내일은 개인 과제로 무엇을 만들지 기획을 좀 해봐야겠다. 내일도 파이팅!
'스파르타 Unity 1기' 카테고리의 다른 글
내일배움캠프 42일차 TIL - Manifest 오류 (1) | 2023.10.10 |
---|---|
내일배움캠프 41일차 TIL - Excel에서 데이터 읽어오기 (0) | 2023.10.06 |
내일배움캠프 39일차 TIL - static 클래스 (1) | 2023.10.04 |
내일배움캠프 38일차 TIL - 무기 2가지 구현 (0) | 2023.09.29 |
내일배움캠프 37일차 TIL - 원형으로 발사되는 투사체 (0) | 2023.09.27 |