zyeon's 작심삼일 코딩 공부
플레이어 상태, 상태 머신 본문
상태 머신이란 특정 상태에 따라 다른 동작을 수행하는 구조를 의미한다.
public enum PlayerState
{
idle,
move,
hit,
die,
};
PlayerState m_playerState;
Animator m_playerAnimator;
난 enum 열거형을 사용해 플레이어 상태 (idle, move, hit, die) 정의했다.
PlayerState m_playerState는 현재 플레이어 상태를 저장할 변수이다.
public void ChangeState(PlayerState newState)
{
if (m_playerState == newState) return;
m_playerState = newState;
switch (newState)
{
case PlayerState.idle:
EnterIdleState();
break;
case PlayerState.move:
EnterMoveState();
break;
case PlayerState.hit:
EnterHitState();
break;
case PlayerState.die:
EnterDieState();
break;
}
}
상태 전환을 해주는 함수 ChangeState()로 플레이어 상태를 변경하고, 상태에 따라 특정 로직 실행한다.
이 부분이 상태 머신의 핵심 요소이다.
private void EnterIdleState()
{
m_playerAnimator.SetInteger("state", 0);
}
private void EnterMoveState()
{
m_playerAnimator.SetInteger("state", 1);
}
private void EnterHitState()
{
m_playerAnimator.SetInteger("state", 2);
if (m_coroutine == null)
m_coroutine = StartCoroutine(PlayerHit());
}
private void EnterDieState()
{
m_playerAnimator.SetInteger("state", 3);
GameManager.Instance.gameState = GameManager.GameState.gameOver;
}
나는 상태 전환시 많은 행동을 하진 않지만, 행동이 많아질 경우에는
위와 같이 각 상태에 따라 전용 메서드를 만드는게 가독성 면에서 좋다.
2024.08.28 - [unity] - 2.5D 게임에서 캐릭터 이동 구현
위 글에서도 캐릭터 이동 시 enum 을 사용했지만 상태 머신이라고 보기에는 힘들다.
상태 전환에 대한 로직이 분산되어 있어 명확하지 않기 때문이다.
'unity' 카테고리의 다른 글
대화·퀘스트 시스템 - (2) 대화문 저장 (0) | 2024.09.12 |
---|---|
대화·퀘스트 시스템 - (1) NPC 설정, 플레이어 레이캐스트 (4) | 2024.09.12 |
2.5D 게임에서 캐릭터 이동 구현 (0) | 2024.08.28 |
오브젝트 풀링 (오브젝트 풀 패턴) (0) | 2024.08.24 |
싱글톤 패턴 (0) | 2024.08.22 |