FSM 유한상태기계 공부 #3 [디자인패턴]

신지한·2024년 1월 3일
0

개발노트

목록 보기
5/15
post-thumbnail

📢 개발노트에 앞서서

본 개발노트는 혼자서 유니티 게임개발 독학하는 과정에서
유용하게 사용될만한 요소들을 구현 방법과 함께 기록&공유하는 게시글이며
부족한점이 있을 수 있어 참고해서 봐주시면 감사하겠습니다

❗ 본 게시글은 유튜브 고박사의 유니티 노트의 영상의 내용을 정리한 게시글로 모든 내용은 영상출처입니다!

❗ 게시글의 내용은 제가 참고하도록 작성한 글이니 자세한 내용은 영상을 직접 보시는걸 권장드립니다!


참고영상 >> https://youtu.be/DeJO4zOFG9E?si=7LlwJTV8qALhnM5C

📚 내용 정리

일반화 프로그래밍을 이용한 State Class

  • 현재의 State Class는 "Student" 외에 다른 에이전트가 사용할 수 없다
    • Enter, Execute, Exit의 매개변수는 현재 상태의 소유주를 나타냄
    • 매개변수로 Student를 사용하고 있기 때문에 다른 에이전트는 사용하기 어려움
    • 클래스나 함수 내부의 내용은 같은데 사용되는 데이터 타입이 다를 때 사용하는 일반화 프로그래밍(Generic Programming)을 활용해 재사용 가능하게 변경

StateMachine Class의 필요성

  • 상태 관리에 대한 코드가 에이전트 내부에 있으면 다른 종류의 에이전트를 제작할 때 상태 관리에 대한 코드를 또 작성해야 한다
  • 때문에 상태와 연관된 모든 데이터와 메소드를 하나의 클래스로 캡슐화 함으로써 코드의 재사용을 줄일 수 있다
  • 에이전트는 StateMachine Class를 참조 클래스로 사용하여 인스턴스를 소유하고, 현재 상태에 대한 관리, 상태 변경 등에 대한 처리를 위임할 수 있다

전역 상태(Global State)

  • 에이전트가 어떤 상태를 수행할 때, 모든 상태에서 지속적으로 업데이트 되어야 하는 조건 논리가 있을 때 이 논리를 소유하고 있는 상태
  • 예를 들어, 게임 속의 에이전트는 사냥이나 수집과 같이 여러 행동을 할 때, 지속적으로 HP를 체크하고 채워주어야 죽지 않고 원하는 행동을 할 수 있다
  • 현재의 FSM에서는 아래와 같은 방법을 생각할 수 있다
    • 방법 1. 에이전트가 소유하고 있는 모든 상태에 조건 논리 추가
      - 모든 상태에 동일한 코드를 작성해야 하며, 상태가 생길 때마다 조건 논리를 또 추가해야 함
    • 방법 2. 에이전트의 Updated() 메소드 내부에 조건 논리 추가
      - 상태에 대한 논리를 에이전트 내부에 작성해야 함
    • 방법 3. 현재 상태와 별개로 작동하는 상태 변수를 제작

상태 블립(State Blip)

  • 에이전트의 상태가 변경될 때, 바로 직전 상태로 복귀한다는 조건하에 다른 상태로 변경하는 것
  • 예를 들어, 보스 사냥 중에 수집 퀘스트를 하던 못된 플레이어가 아무 일도 없었다는 듯이 다시 보스를 사냥하는 것과 같이..
    • 파티원들의 눈치를 봐서 수집 퀘스트를 수행하지만, 언제든 이전 상태로 복귀해 다시 보스 사냥을 해야 한다
  • 이런 형식의 기능성을 FSM에 부여하기 위해서는 반드시 이전 상태를 기억해두고 상태 블립이 그 상태로 전환시킬 수 있게 해야 한다


>> 영상에 사용된 상대 도표 및 UML Class Diagram

📌 공부 후기

이번 영상에서는 여러 에이전트가 State Class를 사용하기 위해서 StateMachine Class를 두어 캡슐화 시켜 다른 타입의 에이전트들이 공용된 함수를 사용하게 하는 기법에 대해서 공부했다

FSM을 공부해나가는 과정에서 상속, 다형성, 일반화 클래스, 클래스 분할 및 참조 클래스 활용 등과 같은 기능에 대해서 조금조금씩 공부해 나갈 수 있는 기회도 같이 가지게 된거같다

아직은 뭔가 나에게 완전하게 흡수가 되지 않아 어떤식으로 사용할지에 대한 막연한 생각밖에 없긴 하지만 앞으로의 개발에 있어서 사용하여야할 필요한 기법들이라고 생각된다

이번 코드에 대해 실습하는 과정에서 저번 코드와도 같이 복습하며 학습하였고 확실히 여러 상태의 에이전트들이 사용하기에 편리하도록 코드가 구성되어졌단것도 깨달았고
전역변수를 둠으로써 특정한 행동을 하도록 하는데 있어서 어떤식으로 해야하고 상태 블립을 활용하여 상태를 복구시키는 과정도 공부가 되었다

영상 끝에는 싱글톤 패턴에 대한 설명도 해주셨는데 해당 패턴에 대해서는 FSM이 끝난 후에 자세히 공부할거라 내용을 생략하였다

profile
게임 개발자 지망생

0개의 댓글