FSM(finite-state machine)은 상태(state)를 기반으로 동작을 제어하는 방식을 구현하기 위한 디자인패턴이다. FSM의 핵심은 단 하나의 상태만을 가진다는 점이다. 상태를 기준으로 어떤 동작을 수행할지 결정하기 때문에 현재 상태만 알 수 있으면 어떤 동작을 수행하려 하는지 명확히 파악할 수 있고 구현이 쉽다는 장점이 있다.
private void Update()
{
UpdatePlayerDirection();
MovePlayer();
CollectEnv();
}
FSM 패턴은 주로 플레이어나 몬스터가 동작할 때 많이 사용한다. 플레이어나 몬스터는 Idle, Attack, Defense, Move 등 다양한 상태를 가지게 되는데 보통 이들은 Update문에서 계속 해서 동작하게 한다.
public enum CreatureState
{
Idle,
Skill,
Moving,
OnDamaged,
Dead
}
먼저 Enum값으로 플레이어나 몬스터의 동작들의 상태를 지정하고
public override void UpdateController()
{
switch (CreatureState)
{
case Define.CreatureState.Idle:
UpdateIdle();
break;
case Define.CreatureState.Skill:
UpdateSkill();
break;
case Define.CreatureState.Moving:
UpdateMoving();
break;
case Define.CreatureState.Dead:
UpdateDead();
break;
}
}
그리고 실시간으로 상태를 체크하여 상태에 맞는 함수를 발동한다.
void MovePlayer()
{
if (CreatureState == CreatureState.OnDamaged)
return;
_rigidBody.velocity = Vector2.zero;
Vector3 dir = _moveDir * MoveSpeed * Time.deltaTime;
transform.position += dir;
}
FSM의 장점을 잘 보여주는 함수이다. MovePlayer는 현재 Update문에서 계속 돌아가고 있는 함수이다. 이 때 만약에 몬스터로부터 대미지를 입었다면 플레이어의 움직임을 멈추어야 하는데 이를 구현하기가 쉽지 않을 것이다. 그러나 상태 머신 디자인 패턴을 플레이어에게 적용하면 간단하게 상태를 체크하고 Move상태가 아니라면 return을 해주면 간단해진다.
https://dodobug.tistory.com/16
[Unity] FSM - 유한 상태 기계
FSM(finite-state machine)은 상태(state)를 기반으로 동작을 제어하는 방식을 구현하기 위한 디자인 패턴이다. FSM의 핵심은 단 하나의 상태만을 가진다는 점이다. 상태를 기준으로 어떤 동작을 수행할지
dodobug.tistory.com
'게임개발 > 스터디' 카테고리의 다른 글
[스터디] delegate 델리게이트란? (0) | 2024.04.13 |
---|---|
[스터디] Enum값을 flag로 사용하기 (0) | 2024.04.12 |
[스터디] MonoBehavior 붙이고 안 붙이고 차이 (0) | 2024.04.11 |
[스터디] 렌더링 파이프라인 알기 쉽게 정리한 글 (0) | 2024.04.11 |
[스터디] 클래스명.필드명 접근(스태틱 관련) (0) | 2024.04.11 |