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

신지한·2023년 12월 27일
0

개발노트

목록 보기
4/15
post-thumbnail

📢 개발노트에 앞서서

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

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

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


참고영상 >> https://youtu.be/4rmf0S885X4?si=MgFXKcMpSTMyocUL

📚 내용 정리

Real World 개요

  • FSM을 활용한 에이전트 제작에 대한 예제로 에이전트가 생활하는 Real World라는 게임 환경을 제작한다
  • 실제 모델을 사용해 이동을 하거나 여러 행동을 플레이하면 좋겠지만 코드를 최소화해서 FSM에 대한 내용만 다룰 수 있도록 모든 상태 변화나 상태 액션들의 출력은 Debug.Log()를 이용해 텍스트로 출력한다

상태 디자인 패턴 (State Pattern)

  • 상태 패턴은 객체의 상태에 따라 동작을 다르게 처리하는 디자인 패턴

    • 에이전트가 취할 수 있는 동작을 클래스로 구현
      - 이때, 모든 상태 클래스는 공통된 기반 클래스를 상속받아 자료형을 통일
    • 에이전트의 상태를 바꿔주는 메소드 구현 : ChangeState()
      - 각 상태는 보통 FSM의 유연성을 위해 상태로 진입할 때나(enter)
      - 상태에서 나갈 때(exit) 취하는 행동에 대해 정의되기를 원함
    private void Update()
    {
    	// currentState에 설정되어 있는 현재 상태를 매 프레임 업데이트
    	currentState.Execute();
    }
    
    public void ChangeState(State newState)
    {
    	// ChangeState()가 호출되기 직전까지 호출된 상태의 Exit() 호출
    
    	// 매개변수로 받아온 newState로 상태를 변경
    	currentState = newState;
    
    	// 새로 설정된 상태의 Enter() 메소드 호출
    }

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

📌 공부 후기

이번 영상에선 직전 게시글에서 언급했던 2단계의 FSM을 구현하는 실습을 해보았다
하는 과정에서 느낀점을 몇가지 말해보자면

이번에 나왔던 코드들을 업로드해주신 코드를 사용하는게 아니라 직접 다 입력하면서 실습을 하였는데
디자인패턴을 사용해서 코딩을 하는 과정에서 abstract나 virtual 같은 키워드의 활용과
프로퍼티 선언등에서 평소에 잘 쓰지않았던 부분에 대해 공부를 하게된거 같다
OOP에서 키워드를 활용한 상속관계를 활용하는 부분은 중요하고 정리할 필요가 있을거 같아
추후 포스팅에서 제대로 공부 후에 정리를 해서 올려야겠다

우선 이번에 공부했던 FSM 유형 자체가 하나의 에이전트에 대해서만 유효하기 때문에
이러한 디자인 패턴은 키우기나 자동사냥하는 게임에 적합할거 같다고 생각이 들었다

실습한거 바탕으로 복습하면서 코드를 좀더 깔끔하게 하고 디자인 패턴을 활용하는 스킬에 대해서
좀더 익숙해질 필요가 있다고 생각이 들었다

추가로 추후에 게임을 제작함에 있어서 적 유닛들에 대해서 필요가 하다면
상태 전환 도표와 UML Class Diagram의 작성을 하는것이 좋을거같다고 생각이 들었다

profile
게임 개발자 지망생

0개의 댓글