public enum StateList
{
Idle, Move, Jump, Attack
}
public class PlayerState : MonoBehaviour
{
private int _direction;
[SerializeField] private StateList CurrentState;
private void Update()
{
// 키 입력 에 따른 각 상태 변화
}
private void Idle()
{
// 기능 로직
// 애니메이션 변화 로직
// 예외처리 등
}
private void Move()
{
// 기능 로직
// 애니메이션 변화 로직
// 예외처리 등
}
private void Jump()
{
// 기능 로직
// 애니메이션 변화 로직
// 예외처리 등
}
private void Attack()
{
// 기능 로직
// 애니메이션 변화 로직
// 예외처리 등
}
}
상태(State)가 늘어나면, 조건에 대한 분기수가 기하급수적으로 늘어난다.게임 기능이 늘어나면
조건문을 늘리는 것이 아니라상태늘린다.
상태 란??A. 어떤 객체의 특정 상황내 행동 규칙

User Input -> Player -> StateMachine -> State.Update()
using UnityEngine;
// 입력 처리 / 물리 판정 / 애니메이션 결정
public class Player : Monobehavior
{
Rigidbody2D _rb;
Animator _animator;
StateMachine _stateMachine;
IdleState _idleState;
MoveState _moveState;
JumpState _jumpState;
void Start()
{
_stateMachine = new StateMachine();
_idleState = new IdleState(this);
_moveState = new MoveState(this);
_jumpState = new JumpState(this);
_stateMachine.ChangeState(_idleState);
}
void Update()
{
_stateMachine.Update();
}
public void ChangeState(Istate state)
{
_stateMachine.ChangeState(state);
}
}
상태(State)는 물리 엔진, 애니메이션등 직접적인 시스템을 관리하지 않음.
상태(State)관리하는 객체(MonoBehaviour 를 상속받은)가 관리 한다.
점프 상태에서 공격 구현해보기