유니티로 상태패턴을 구현할 때 가장 정석적인 방법이 무엇인가요?
현재는 FSM + enum + 코루틴으로 구현하고 있습니다.
// 플레이어의 동작 enum문
public enum Behaviour
{
Idle,
Move,
Attack,
DoubleAttack,
UltimateAttack
}
public Behaviour behaviour { get; set; }
// PlayerCtrl의 Start함수에서 사용할 FSM 코루틴
public IEnumerator FSM()
{
while (true)
yield return StartCoroutine(behaviour.ToString());
}
// 조건에 따른 상태 전이를 위한 함수
bool IsAttack()
{
if (Input.GetMouseButtonDown(0)) return true;
return false;
}
// 문제의 상태에 따른 행동 코루틴
IEnumerator Attack()
{
yield return new WaitForSeconds(0.933f);
if (IsAttack()) behaviour = Behaviour.DoubleAttack;
if (IsIdle()) behaviour = Behaviour.Idle;
if (IsMove()) behaviour = Behaviour.Move;
}
어택 상태 중에 클릭 한번 더하면 더블어택이 되게 구현하고 싶은데
업데이트에서 함수로 돌릴 땐 돌아가던 것이
코루틴으로 바꾸고 나니까 돌아가지 않습니다.
질문 1. FSM + 상태패턴 이렇게 구현하는것이 맞는지 잘 모르겠습니다.
질문 2. 더블어택은 왜 돌아가지 않을까요? ㅠ