예를 들어서 3인칭 백뷰 게임을 만든다고 할 때, 이미 플레이어 조작을 FSM으로 구현했다고 칠게. (StateMachineBehaviour 아님)
그리고 이때 스킬이 찌르기나 돌진 같은거를 구현해야 된다면 어떻게 해?
1. FSM에 찌르기와 돌진 상태를 추가하는 방식으로 구현. (필요시 State에 BT 방식을 가미)
2. 스킬 컴포넌트를 새롭게 만들고 기존 FSM 상태는 IsInSkillState 상태같은걸로 고정해서 상태 전환이 안되게 함.
3. 스킬 액터와 레이어를 만들어서 FSM과 비슷하지만 독립적으로 진행시킴. 이때 스킬 액터의 애니메이션이 우선순위가 더 높아서 외관으론 차이 없음.
저는 플레이어 대기 걷기 달리기만 FSM, 그 외엔 bool & timer 어떤 이동 상태든 상관 없는 스킬이 있고, 스킬을 쓰는 중엔 대기 혹은 걷기 상태로 고정되는 스킬이 있고.. 이래서 걍 FSM과 별개로 뒀음 몬스터는 좀 다른데 어택 상태 내부에서 스킬을 처리하고 스킬 끝날 때까지 다른 상태 전환은 하지 않음 단, 행동 불가 (cc) 상태로 전환이 가능한 스킬 타입인 경우 제외
답변 고마워. 내가 적어둔 2번과 비슷한 느낌인가? 나는 FSM에 애니메이션과 움직임이 종속되는 구조라, 현재 재생중인 스킬 애니메이션을 재생할거라면 현재 상태를 멈춰야되거든. Timer를 사용했다면 별도의 Actor 같은 걸 만든 것 같은데, FSM과 스킬 애니메이션은 어떻게 구분해서 관리해?
유니티 애니메이터엔 레이어가 있어서 상위 레이어(스킬 애니메이션)이 실행될 경우 밑에 깔린 레이어들은 다 무시됨
고마워 참고할게
정답은 없고 구체적인 요구사항에 따라 매번 다름. 흔한 소울이나 몬헌류같은 3D 백뷰 액션게임이고 상태를 FSM으로 관리한다고 치면 나라면 상태를 정지/이동/회피/공격 등으로 나누고 공격 상태 안에서 어떤 공격을 하느냐에 따라 분기 처리를 할 것 같은데, 반복하지만 이 결정은 실제로 구현을 해 봐야만 할 수 있는거라 이렇게 물어봐도 큰 의미는 없음
그리고 FSM으로 상태관리 시 FSM 상태 1개 = 애니메이션 1개 인 구조는 일반적으론 구조가 경직되기 마련이라 안쓰는게 나음 애니메이션 관리 측면에서 보면 유니티 애니메이터 자체가 이미 FSM이어서 굳이 외부에 또만들 이유가 없기도 하고
스킬 끝날때까지 스킬 상태 유지하면 되징. 특정 스킬 상태에서 무언가 특수한 효과라던지 이런게 있다면 그걸 담당하는 클래스를 만들고 인터페이스를 FSM의 스킬 상태에 의존 시켜서 하면 되지.
나는 FSM 을 큰 분류에서 상태로 만들고 그 큰 분류에서의 상태 전이 조건만 FSM에서 관리하고 구현 클래스에서 기능 구현을 하고 인터페이스로 의존시켜서 FSM에서 호출하는 방식을 선호해