25/04/02

YSB1026·2025년 4월 3일
0

25/04/02

  1. 3D 프로젝트에서
    컨트롤+쉬프트+ f
    클릭한 오브젝트를 내가보는 시점으로 옮김

패턴 디자인을 언제 어떻게 적용해야할지 조금 어렵기도해서,
gpt나 강사님 말대로 당장 설계 때 적용한다기 보단, 구현을 해놓고 중복 코드가 많아지면 적용해보기.
소규모 프로젝트 여러개를 많이 해봐야겠다.

  1. 디자인 패턴

전략 패턴 (Strategy Pattern)
1. 개념
전략 패턴은 객체의 행위를 캡슐화하고 동적으로 변경할 수 있도록 하는 패턴입니다. 즉, 특정 기능(전략)을 인터페이스로 정의하고, 다양한 전략을 개별 클래스로 구현하여 실행 중에 전략을 바꿀 수 있도록 합니다.

  1. 사용 이유

특정 동작을 상황에 따라 다르게 실행해야 할 때 (예: AI 행동 패턴, 이동 방식, 공격 방식 등)

if-else 혹은 switch 문이 많아지는 것을 방지하여 코드 유지보수를 용이하게 하기 위해

코드의 유연성과 확장성을 높이기 위해

상태 패턴(State Pattern)
유니티에서 상태 패턴(State Pattern) 은 객체의 상태에 따라 다른 동작을 수행할 수 있도록 설계하는 방법이야. 주로 AI, 플레이어 상태, UI 관리 등에 사용되지.

유니티에서의 상태 패턴 종류
클래스 기반 상태 패턴

상태를 클래스로 만들어서 객체지향적으로 관리.

State 인터페이스를 만들고, 이를 상속하는 여러 상태 클래스(IdleState, AttackState 등)를 생성.

Context(주로 StateMachine)에서 현재 상태를 참조하고 변경.

열거형(enum) 기반 상태 패턴

enum을 사용하여 상태를 정의하고, switch 문으로 상태별 로직을 관리.

간단한 경우 유용하지만, 상태가 많아지면 코드가 복잡해질 수 있음.

유한 상태 기계(Finite State Machine, FSM)

상태와 상태 전환(transition)을 정의하고, 유한한 개수의 상태 내에서 이동하는 방식.

게임 AI, 애니메이션 시스템 등에 많이 사용됨.

일반적으로 클래스를 활용한 FSM을 구현하거나, 유니티의 Animator State Machine을 사용하기도 함.

그럼 유한 상태 기계(FSM)가 뭐야?
Finite State Machine(FSM, 유한 상태 기계) 는 한 번에 하나의 상태만 가질 수 있고, 특정 이벤트에 따라 정해진 상태로 전환하는 시스템이야.

FSM의 구성 요소

상태(State): 현재 객체의 상태 (Idle, Attack, Dead 등)

이벤트(Event): 상태 변경을 유발하는 트리거 (HP == 0, 적 발견, 공격 버튼 입력)

전이(Transition): 한 상태에서 다른 상태로 넘어가는 과정

FSM 예제 (AI 적 캐릭터)
Idle (대기) → 적을 발견하면 Chase (추격)

Chase (추격) → 적과 가까워지면 Attack (공격)

Attack (공격) → 적이 사라지면 Idle (대기)

이렇게 상태가 정해진 규칙에 따라 전환되는 방식이 유한 상태 기계야.

유니티에서 FSM을 구현하는 방법
애니메이터(Animator) 기반 FSM

유니티 애니메이터의 State Machine을 활용

트랜지션을 설정하여 상태 전환을 제어

코드 기반 FSM (클래스 기반)

상태를 클래스로 만들고, StateMachine 클래스를 활용해 상태를 변경하는 방식

코루틴 기반 FSM

IEnumerator 코루틴을 사용하여 상태 전환을 처리

유니티에서 AI나 플레이어 상태를 관리할 때 FSM을 활용하면 깔끔하게 정리할 수 있어!

0개의 댓글