FSM StateMachine 상속

2024. 7. 1. 22:45Unity/Unity 학습정리

  최종 프로젝트 진행중에 같은 State를 가지는 객체가 있는데 State안에서 분기되는 기준이랑 행동하는 로직이 조금씩 다른 두 개의 객체가 있었다. 해당 객체를 BaseMonster를 부모로 상속을 시켜주려하다보니 StateMachine도 상속을 시키게 되는 구조가 되었는데 그럼 각 객체는 겹치는 부분에 대해서 어떻게 처리를 할지 고민이었다.

 

 

 
  •  
  • BaseMosnter를 부모로 PartnerMonster, EnemyMonster가 상속을 받는데 StateMachine도 상속을 받는다. 근데 상태들은 거의 비슷하고 동작의 로직이 조금씩 다르다
  • ex) PartnerMonster는 Player를 따라다니고, 적을 탐지하면 추적 및 공격
  • ex) EnemyMonster는 플레이어를 탐지하면 추적 및 공격, 자기자리를 벗어나면 다시 돌아옴

 

튜터님께 질문을 드렸더니, 두 가지 방식을 제안해주셨다.

 

  • StateMachine을 따로 파서 원하는 State를 골라서 담아주기
  • MonsterStateMachine을 공용으로 쓰되 분기를 두어 소프트웨어를 각각 채워주기
  • 하나의 StateMachine으로 모두 처리가능
  • PartnerMonster나 EnemyMonster가 StateMachine을 이용할 때 본인에 맞는 State를 생성하는 구조로 설계한다. (해당 객체에 필요한 소프트웨어만 넣어준다고 생각)
  • 예를들어 같은 IdleState라도 Update에서 분기하는 조건이 두 객체가 다를 것
  • 그럼 PartnerIdleState, EnemyIdleState를 만들되 객체에서 필요한 State만 생성자 혹은 다른곳에서 처리해 줄 것

후자의 방식도 좋은 방식인것 같아서 내일 이 방법으로 분기를 할 것 같다.