플레이어 상태머신을 구현하는데 있어서 의문이 있는데
설명을 하자면
플레이어 기본 상태 (Idle)
InputSystem으로 받은 키 값으로 인한 플레이어 상태 (Jump)
Jump중에 플레이어 Dash
이때 플레이어는 이미 Jump로 인해 공중에 뜬 상태이고
대쉬 동작이 아직 끝나지 않았는데 바닥에 닿게 될 경우
대쉬 관련 상태에 오류가 발생하는데
어떤 구조로 상태머신을 구현 해야 하는지 당최 알수가 없습니다...
제가 설명을 많이 못하는 것 같은데
좀 더 쉽게 설명 해보면 기본적인 상태머신은 한가지의 상태만을 가지고있는데
그런 이유로 2가지 이상의 상태가 발생하게 되는 상황(방금처럼 점프 중 대쉬, 점프 중 공격, 이동 중 대쉬 등등)에
대한 상태 처리를 어떻게 해야 할지 의문입니다.
반드시 상태머신을 이용해야 한다면, "점프 중"일 때 대시 입력 -> "점프 대시"라는 상태로 전이 이런식으로 처리해야 할거같은데. 상태머신은 중첩을 보통 고려 안하니까
점프 상태를 가지면서 대시 상태를 동시에 가지는건 X -> "점프 대시"라는 새로운 상태로 전이는 O
보통 플레이어 작업하는데 상태머신을 사용하지 않는건가요? 그렇다면 어떤 구조로 플레이어를 만드나요? 그냥 알아서 잘 이어지게 만드나요?
상태머신을 유닛 제어에 사용하는 게임은 대표적인 예시로 XCOM 생각하면 됨. XCOM의 유닛은 공격 할 때는 절대 이동하지 않고, 이동할 때는 절대 공격하지 않잖아?
보통 실시간 게임은 입력에 대해 즉각적인 행동을 하도록 하지
제가 완전 고정관념에 박혀서 생각하고 있었네요... 어떡게 보면 당연한거였는데.. 굳이 어려운 길을 가려고했네요
예를들어 이단 점프같은게 존재 하지 않는다면, isJumping 플래그를 만들어서 점프 후에, 착지까지 isJumping을 활성화, if(isJumping) 이라면, Jump 입력은 무시, Attack입력은 JumpAttack 실시, Dash 입력은 JumpDash 실시 이런 식으로 구현하면 될거임
무브먼트 스테이트랑 어택 스테이트를 별도로 두거나.. 점프 스테이트에서 하위 스테이트로 뻗어나가거나.. 해야할 것 같은데 그러면 너무 골치아파져서 플레이어는 FSM 안 썼슴.. 걍 타이머 기반으로 함
보통 플레이어 작업하는데 상태머신을 사용하지 않는건가요? 그렇다면 어떤 구조로 플레이어를 만드나요? 그냥 알아서 잘 이어지게 만드나요?
아녀.. 저는 제멋대로 만든 거라 일반적이진 않음 저 같은 경우 플레이어는 대기, 걷기, 뛰기에만 상태머신쓰고 나머지는 무수한 쿨다운들로 처리해여
그렇군요 감사합니다. 덕분에 머리가 트였습니다.
아 무수하다고 하면 좀 이상하네.. 글로벌 스킬쿨, 회전쿨, 이동쿨 등등 대충 5~6개? 정도네요
State는 독립적이여야함 지금 내가 공중에 떠있는 상태인데 대쉬 상태가 중첩되면 당연히 충돌이 나서 로직이 터짐 State를 분리하셈
디자인패턴이 정답은 아닌데 State 패턴 공부하면 좋을거임 난 FSM으로 플레이어 컨트롤하는게 편해서 FSM만씀
점프 후에 하는 대쉬나 바닥에서 하는 대쉬 둘 다 별반 차이가 없으면 그냥 대쉬 방향으로 돌진하게 하고 기본 State(보통 Idle)로 돌아가게 하면 알아서 돌아감
덕분에 생각이 많이 트였습니다. 감사합니다