https://www.youtube.com/watch?v=uFKd7JbI5QY&list=PL412Ym60h6uufFJlxsKcYkOtRu-PIsLuA&index=2
🎮 유니티의 스테이트 패턴 활용 이해하기
![](https://blog.kakaocdn.net/dn/bT821O/btsL9sJqcLR/X34cosygkT9KjK8hg2vE80/img.jpg)
-
유니티를 이용하면 이미 다양한 디자인 패턴을 사용하고 있는 것이며, 그 중 스테이트 패턴도 포함된다.
-
메카님 시스템을 통해 애니메이션 상태 전이를 다이어그램으로 확인할 수 있으며, 이는 스테이트 패턴에 기반을 둔 FSM의 한 예이다.
-
게임 개발에서는 애니메이션 및 NPC 제어를 위해 스테이트 패턴이 주요하게 사용되며, 유니티는 이를 시스템적으로 구현해 두었다.
-
스테이트 패턴은 다양한 오브젝트의 상태를 제어하므로, 유연한 시스템 설계와 복잡성 감소에 기여한다.
🎮 스테이트 패턴 데모 및 개요
![](https://blog.kakaocdn.net/dn/bWeQ8i/btsL98jgzRc/goAMZ0fE35SSlZ67ErL4A0/img.jpg)
-
스테이트 패턴은 객체의 내부 상태에 따라 행동을 변화시키는 디자인 패턴으로, 캐릭터 애니메이션과 다양한 상태에서 활용된다.
-
이 데모는 강의에서 제공된 간단한 예제로, 캐릭터가 세 가지 상태(워크, 점프 등)로 전환되는 모습을 보여준다.
-
유니티 스퀘어 웹사이트에서 데모 및 이북 자료를 제공하며, 필요한 자료를 다운로드할 수 있다.
-
스테이트 패턴은 캐릭터 애니메이션 외에도 네트워크 상태 등 다양한 분야에 적용될 수 있다.
🛠️ 스테이트 패턴의 유연성과 유지보수성
![](https://blog.kakaocdn.net/dn/ccI78s/btsL90FEK58/Lqd5gHpb5g5tCbunrKPcKK/img.jpg)
-
스테이트 패턴을 사용하는 장점은 각 상태를 클래스별로 분리하여 로직을 캡슐화하고 전환을 유연하게 처리할 수 있다는 것이다.
-
상태가 추가될 때마다 클래스가 늘어나는 경향이 있어 복잡성이 증가할 수 있으나, 이를 통해 가독성과 유지보수성이 향상된다.
-
디자인 패턴 적용이 항상 필요한 것은 아니며, 필요에 따른 선택적 적용이 중요하다.
-
스테이트 패턴은 프로젝트의 규모에 따라 적용 여부를 결정할 수 있는 유용한 도구다.
🎮 FSM을 활용한 스테이트 패턴 이해
![](https://blog.kakaocdn.net/dn/RPiMN/btsL95z5K7P/2jNxXGUypVn8oXLpiurswK/img.jpg)
-
스테이트 패턴은 FSM(Finite State Machine)을 통해 시스템화된 방식으로 사용되며, 이는 유한 상태 기계라고도 불린다.
-
캐릭터의 여러 상태(예: 스탠딩, 점프, 워킹) 간의 전환은 특정 조건에 따라 이루어지며, 이는 상태 전환 이벤트와 상태 유지 관리에 필수적이다.
-
코드를 간단히 유지하는 대신, 스테이트 인터페이스를 활용하여 명확하고 확장 가능한 상태 관리를 제공하는 것이 중요하다.
-
AI 로직에서도 FSM을 활용할 수 있으며, 예를 들어 몬스터의 AI는 상태에 따라 힐링, 패트롤, 어택, 도망가는 행동을 관리할 수 있다.
FSM(유한 상태 기계)의 개념과 활용
-
스테이트 패턴은 FSM(Finite State Machine)의 형태로 게임에 적용되며, 특정 시스템화를 통해 상태 전이를 관리한다.
-
다양한 상태가 존재하며, 대표적으로 스탠딩, 걷기, 점프가 있다. 예를 들어 스탠딩 상태에서 걷기로 전환하는 등의 이벤트가 발생한다.
-
FSM을 구현할 때는 상태, 전환, 이벤트, 동작의 네 가지 요소를 포함하여 구성한다.
-
기본적인 FSM 구조는 복잡한 기능 추가시 확장성이 떨어져 다른 디자인 패턴이나 인터페이스를 활용하여 보다 효율적으로 설계해야 한다.
스테이트 패턴의 구현 및 전환 조건
-
스테이트 패턴은 특정 상황에 따라 캐릭터의 상태를 변경하며, 각 상태에 대한 전환 조건을 설정하는 데 유용하다.
-
상태 전환의 예시로, 캐릭터가 지면에 있을 때와 점프할 때 상태를 변경하며, 이동을 시작하면 워크 상태로 전환된다.
-
각각의 상태에 대해 별도의 조건 클래스를 만들어 유지보수의 용이성을 높일 수 있다.
-
유니티의 스테이트 머신은 각 상태를 통합 관리하고, 현재 상태를 업데이트하는 역할을 담당한다.
몬스터 AI의 상태 기반 구현 예시
-
게임에서 몬스터의 AI를 구현할 때는 FSM(유한 상태 기계)을 활용하여 상태를 관리한다는 점이 중요하다.
-
몬스터의 상태는 네 가지로 구분되며, 힐링, 패트롤, 어택, 도망가는 등의 행동을 취할 수 있다.
-
플레이어의 피가 적어지면 몬스터는 도망가서 힐링하고, 이후 순찰을 시작하며, 플레이어와의 접촉 시 공격하는 등 상황에 따라 상태를 변경한다.
-
이를 통해 몬스터 AI는 복잡한 행동 패턴을 효과적으로 표현할 수 있으며, 예시로는 레이드 게임 AI의 구현이 있다.
스테이트 머신 비헤이비어의 활용
-
유니티 프로젝트에서는 스테이트 머신 비헤이비어가 여러 애니메이터 상태에 부착되어 있어 이를 통해 상태 간 전환을 관리한다.
-
스크립터블 오브젝트를 통해 상태를 구체화하고, 이러한 구조는 유지보수성과 확장성을 크게 향상시킨다.
-
상태에 따라 각기 다른 클래스를 개별적으로 만들어, 캐릭터의 행동(추적, 공격 등)을 구분하고 이를 쉽게 수정 가능하게 한다.
-
최종적으로 각 상태가 갖는 로직을 통해 더 유연하고 자연스러운 캐릭터 행동을 구현할 수 있으며, 이는 프로젝트의 품질을 높인다.
상태 패턴의 장점과 확장성
-
상태를 추가해야 할 경우, 기존 코드를 수정하지 않고도 새로운 상태를 쉽게 추가할 수 있다.
-
디자인 패턴은 개발 초기에는 다소 복잡하게 느껴지지만, 확장성과 유지보수에 있어 큰 장점을 제공한다.
-
대부분의 디자인 패턴이 그러한 특성을 가지므로, 확장성을 고려해 접근할 필요가 있다.
📝 스테이트 패턴의 특징과 장단점
![](https://blog.kakaocdn.net/dn/bOxV6M/btsL8GuLSgT/RJ9qUlVnDdLnAit09sUNy0/img.jpg)
-
스테이트 패턴은 객체의 내부 상태에 따라 행동을 변화시키고, 상태별로 클래스를 캡슐화하여 유지보수성과 확장성을 높인다.
-
다양한 상황에서 적용 가능한 예로는 캐릭터 애니메이션 상태와 네트워크 연결 상태 등이 있다.
-
클래스 수가 증가하면 복잡성이 증가할 수 있으며, 구조를 이해하지 못하면 복잡하게 느껴질 수 있다.
-
모든 디자인 패턴은 장점과 단점이 있으므로, 상황에 맞게 적용 여부를 신중히 판단해야 한다.