2-21)TIL /./FSM

최보훈·2024년 2월 21일
0

유한 상태 머신(FSM)

  • 유한상태 기계를 나타내는 디자인 패턴이다
  • 상태와 상태간의 전환을 기반으로 동작하느 동적 기반 시스템이다.
    EX) 플레이어의 상태 관리
    • 상태: 정지상태, 이동상태, 점프상태
    • 전환 조건 : 이동입력, 점프 입력, 충돌 등의 조건
    • 동작 : 이동 애니메이션 재생, 점프 처리, 이동 속도 조정등

구현

이번 강의에선 플레이어 인풋 액션을 다른 방식으로 사용 하였다.
InputAction의 설정은 이전과 같지만 스크립트를 생성하는 방식이 다르다.

플레이어 inputaction의 하이라키에서 스크립트를 바로 생성을 한다.

Player와 관련된 스크립트들

  1. Player
  2. PLayerAnimations 애니메이션 파라미터 값들을 해쉬값으로 설정해주는 스크립트
  3. PlayerIput = 플레이어 InputAction을 사용하기 위한 스크립트

StateMachine과 관련된 스크립트들

  1. IState = 각각의 스테이트에서 이루어질 동작의 순간을 지정해준다

    • public void Enter();                  //스테이트에 들어올때 
      		public void Exit();           //스테이트에서 나갈때 
      		public void HandleInput();    //스테이트중에 입력 처리를 할때 
      		public void Update();         //업데이트
      		public void PhysicsUpdate();  //물리적 업데이트
  2. StateMachine(추상 클래스)
    스테이트의 변경을 관리한다.

    PlayerData 관련

  3. PlayerSO = 아래의 둘을 가진 SO

  4. PlayerGoundData = 플레이어가 땅에 있을때 이동과 관련된 데이터

  5. PlayerAirData = 플레이어가 하늘에 있을때 이동과 관련된 데이터

    PlayerState 관련

  6. PlayerStateMachine = 다른 스테이트들을 담고있어야 한다.

  7. PlayerIdleState

  8. PlayerBaseState =플레이어의 키 입력을 감지

  9. PlayerGroundState

    Animation관련

    트러블 발생

    플레이어가 달리는 동작으로 변환을 할때 조금 부자연스럽게 전환됨이 발견됨

    Walk상태에서 Run으로 변환을 할때 Walk 에서 바로 Run으로 변환되는게 아니라 Exit를 지나 Idle을 통해 Run으로 전환되는 현상이 발생되었다.
    이렇게 여러 상태를 거쳐 Run으로 변환되기에 애니메이션 변환에 지연이 생기게됐다.

    해결

    Walk에서 Exit로 가는 파마니터의 Transition Duration을 0으로 변경하니 해결

0개의 댓글