유니티에서 2d든 3d든 플레이어를 만드는 데 있어서 이동, 점프, 대쉬, 공격 기타 등등의 동작이 있을 때
혹시 어떤 방식의 로직으로 코드를 작성하시나요?
상태머신, 어빌리티, 델리게이트 등 여러 가지가 있는 것 같은데
제가 플레이어 작업할 때 상태머신으로 할 경우 2가지 이상의 상태가 실행되어야 할 때 어려움을 많이 느끼고 있습니다.
그래서 혹시나 플레이어를 어떤 식으로 구성해서 작업하시는지 궁금해서 물어봅니다.
유니티에서 2d든 3d든 플레이어를 만드는 데 있어서 이동, 점프, 대쉬, 공격 기타 등등의 동작이 있을 때
혹시 어떤 방식의 로직으로 코드를 작성하시나요?
상태머신, 어빌리티, 델리게이트 등 여러 가지가 있는 것 같은데
제가 플레이어 작업할 때 상태머신으로 할 경우 2가지 이상의 상태가 실행되어야 할 때 어려움을 많이 느끼고 있습니다.
그래서 혹시나 플레이어를 어떤 식으로 구성해서 작업하시는지 궁금해서 물어봅니다.
저는 이동만 FSM, 나머지는 타이머
혹시 타이머를 어떤 방식으로 구현해서 동작하는지 대충 설명 부탁드려도될까요?
음.. 이동을 제외한 모든 행동이 다 스킬처럼 쿨타임이 달렸다고 보시면댐 여기에다 글로벌 쿨타임일 때 return 행동 이후 이동, 회전 쿨타임일 때 return 상태 이상 타이머 돌아갈 때 return 뭐.. 제 생각에도 최선의 방법은 아닌 거 같긴한데 굴러가긴 함
어떤 느낌인지 알겠습니다 감사합니다
모든 상태를 r3 로 fsm 직접 구현해서 사용함
r3가 혹시 뭔지 여쭤봐되될까요?
unirx만든사람이 unirx 버리고 다시만든거
FSM으로 힘들다면 Behaviour Tree도 사용해보셈. 그런데 엥간한건 FSM으로도 충분하던데
Behaviour Tree가 혹시 뭔지 여쭤봐도될까요?
객체들 상태관리할 때 쓰는건데 FSM은 작은 범위에서는 쓰기 편하지만 불륨이 커지면 슬슬 힘겨워지고 BT는 노드로 관리되는 거라 좀더 큰 불륨의 상태를 관리할 때 나는 BT를 썼음.
FSM보다 더 복잡하지만 확실히 볼륨이 커졌을 때 생각하면 좋은 기능인것 같지만 찾아보니 플레이어 조작한는데 있어서는 조금 무리라고 나와있는데 괜찮은가요?
저는 게임에서는 주로 FSM을 사용해보고 BT는 예전에 로봇 제어(ROS)할 때 사용해봤는데 거기서 사용되는 각각의 제어 노드들로 무리라고 할 수 있는 상황이 있을 수 있을까 싶네요. 그나저나 2가지 이상의 상태가 실행되어야 할 때가 언제인가요? 저는 FSM으로 영웅 상태를 제어할 때 그런 경우가 발생하지 않아서...
2가지 이상 상태가 실행된다는게 점프 중 공격 이라던가 점프 중 대쉬 등 이런 상태들이 2가지 이상 이루워져야 할때 어려움을 격고있습니다.
그런 류의 게임이라면 상태 전의 조건이 다양하게 많을테니 FSM이 부적절할지도 몰라요. 저라면 BT를 썼을거같긴합니다.
FSM이 상태 불륨이 작을때는 훨씬 더 직관적이고 BT는 노드들이 모듈화 되어 트리에서 조립하는 방식이라 확장성이 더 뛰어나고 서브트리 등을 이용하면 복잡한 상태들도 정리가 되어서 좋아요. 다만, BT의 노드들을 제어하는 것들에 대해 공부가 필요하다는 단점이 존재하죠. (참고로 제가 명사를 잘 못 외우는 편이라 잘못된 명사를 썼을 수도 있음)
FSM의 최대 단점은 상태 전이 조건을 상태에서 정의해줘야 해서 의존성이 생겨서 유연성이 떨어진다는 단점과 상태가 많아지면 각 상태의 전이 조건을 직접 그 상태 클래스에 들어가서 확인해야 한다는 단점이 존재하죠.
반면 BT의 경우 노드 간의 상태 전이를 트리에서 구성하므로 한 눈에 전의 조건 등을 파악할 수 있다는 장점이 있습니다. 플레이어 조작한는데 있어서는 조금 무리 << 이 말이 왜 있는지는 모르겠어요. 제가 생각하는 BT의 단점은 공부해야 한다는 점 1개와 FSM은 기존의 코드 방식이라서 쉽게 적응할 수 있지만 BT는 트리 구조에 대한 것이라서 좀 느낌이 다르다고 해야 할까 그렇습니다.
제가 아직 BT라는 로직을 완벽하게 이해를 한게 아니기에 이것저것 찾아봤을 때 BT는 AI의사 결정에 특화된 코드라고 봤고 그래서 플레이어 같은 경우 의사결정이 플레이어가 직접 하기에 해당 BT로직이 굳이 쓰어야하나 싶어서 무리라고 표현을 한것 같습니다.
AI의사 결정이나 게임 캐릭터의 상태 변경이나 똑같지 않을까 싶어요. 그리고 제가 FSM으로 계속한다면 위에서 언급한 점프 중 공격 등의 상태를 하나의 상태로 만들 거 같아요.
게임 캐릭터의 상태 변경도 AI 의사 결정이죠.
답변 너무 감사합니다. BT라는 것도 처음 알게됐습니다. 감사합니다!!
홧팅!!!!! 유켄듀잇
지금까지 플레이어를 NPC로 이해하고 있었네요 ㅎㄷㄷㄷ 암튼! 유저의 조작에 대한 상태변화를 FSM으로 할 수 있다면 BT로도 할 수 있습니다! 화팅
2가지 상태가 동시에 Running해야 한다면 BT에는 병렬 처리에 대한 것도 있으니 BT를 사용해보세요.