Unity로 이해하는 상태 패턴 (State Pattern)

2023. 8. 9. 13:02·Unity/Design Pattern
반응형

상태 패턴란 ??

상태 패턴은 개체가 클래스를 변경한 것처럼 내부 상태가 변경될 때 개체가 동작을 변경하도록 하는 동작 디자인 패턴입니다.

게임을 위한 적 AI를 만든다고 상상해 보십시오. 적은 순찰, 플레이어 추격, 공격과 같은 여러 상태를 가질 수 있습니다. 이러한 동작은 상당히 다르며 상태 패턴을 사용하지 않으면 코드가 여러 'if' 또는 'switch' 문으로 빠르게 복잡해질 수 있습니다.

상태 패턴이 빛나는 곳입니다. 이를 통해 서로 다른 동작을 별도의 클래스로 캡슐화하고 런타임에 전환할 수 있습니다.

Unity에서 상태 패턴 구현

플레이어를 순찰하거나 추격할 수 있는 간단한 적 AI로 상태 패턴을 설명하겠습니다.

첫째, 적 상태에 대한 추상 기본 클래스가 필요합니다.

csharpCopy code
public abstract class EnemyBaseState
{
    public abstract void EnterState(Enemy enemy);
    public abstract void Update(Enemy enemy);
}

그런 다음 구체적인 상태 클래스를 만듭니다. 다음은 PatrolState의 예입니다.

csharpCopy code
public class PatrolState : EnemyBaseState
{
    public override void EnterState(Enemy enemy)
    {
        // Any setup code for the Patrol state
    }

    public override void Update(Enemy enemy)
    {
        // Code to make the enemy patrol around
    }
}

다음으로 'Enemy' 클래스가 있습니다. 이 클래스에서는 현재 상태를 추적하고 Update 메서드를 현재 상태로 위임합니다.

csharpCopy code
public class Enemy : MonoBehaviour
{
    private EnemyBaseState currentState;

    public void TransitionToState(EnemyBaseState state)
    {
        currentState = state;
        currentState.EnterState(this);
    }

    private void Update()
    {
        currentState.Update(this);
    }
}

상태 사이를 전환하려면 새 상태 인스턴스로 TransitionToState 메서드를 호출하기만 하면 됩니다. 'Enemy' 클래스는 각 상태의 세부 사항을 알 필요가 없습니다. 동작을 현재 상태 개체에 위임할 뿐입니다.

결론

상태 패턴은 특히 복잡한 게임 개체 동작을 관리하기 위한 게임 개발자 도구 상자의 강력한 도구입니다. 코드를 구성하는 깨끗하고 효율적인 방법을 제공하므로 이해, 확장 및 유지 관리가 더 쉬워집니다.

저작자표시 비영리 변경금지 (새창열림)

'Unity > Design Pattern' 카테고리의 다른 글

Unity로 이해하는 빌더 패턴  (0) 2023.09.27
소프트웨어 개발 3대 원칙 : DRY, KISS, YAGNI  (0) 2023.08.10
Unity로 이해하는 옵저버 패턴 (Observer Pattern)  (0) 2023.08.08
Unity로 이해하는 팩토리 패턴 (Factory Pattern)  (0) 2023.08.07
Unity로 이해하는 어댑터 패턴 (Adapter Pattern)  (1) 2023.08.06
'Unity/Design Pattern' 카테고리의 다른 글
  • Unity로 이해하는 빌더 패턴
  • 소프트웨어 개발 3대 원칙 : DRY, KISS, YAGNI
  • Unity로 이해하는 옵저버 패턴 (Observer Pattern)
  • Unity로 이해하는 팩토리 패턴 (Factory Pattern)
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (727)
      • 스마트팜 (1)
      • 상품 추천 (223)
      • DataBase (0)
        • MongoDB (4)
        • PostgreSQL (0)
      • 하드웨어 (18)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    라떼우유
    unity
    cv2
    리스트
    rtsp
    파이썬
    믈레코비타멸균우유
    appdevelopment
    learntocode
    devlife
    스크립트 실행 순서
    리뷰관리
    C#
    codingcommunity
    상품 리뷰 크롤링
    list
    유니티
    카페24리뷰이관
    긴유통기한우유
    스크립트 실행
    programmerlife
    programming101
    리뷰이관
    쇼핑몰리뷰
    ipcamera
    셀레니움
    스마트스토어리뷰
    카페24리뷰
    Python
    codingtips
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
Unity로 이해하는 상태 패턴 (State Pattern)
상단으로

티스토리툴바