https://www.youtube.com/watch?v=uFKd7JbI5QY&list=PL412Ym60h6uvqYiCVKk5NiEFpDEwOMQFX&index=7

 

 

 

대표적인 예시가 유니티 의 Animator 창

 

 

 

+


스테이트 패턴 의미

블럭 교체 방식

신호등 같은 것

오브젝트의 내부 상태가 바뀜에 따라 행동을 바꾸게 만드는 패턴

객체(Context)는 행동을 직접 처리하지 않고,
 현재 자신이 맡고 있는 "역할 배우(State Object)"에게 모든 실행 책임을 위임합니다

+

예시 

스탠스 바꾸기 가능
스탠스 는 딱 1개만 유지
2개 이상의 스탠스 보유 금지

얼굴 표정
Happy, Angry, Scared

모션 동작
Attacking, Blocking, UsingItem, Reloading


+

흔한 실수

Update ( ) 에서
if , else if , else if ... 이렇게 하면
코드를 읽기 힘들고, 수정 시 버그가 발생하기 쉽다

그래서 해결법이 스테이트 패턴임
각 상태(Idle, Run, Jump)를 별도의 클래스로 분리하는 것임


+

        if (currentState != null)
        currentState.Exit();
// 하나의 상태만을 위해서
// 이전 상태를 종료시킨다


+

상태이상으로 쓰면 안됨
독 이면서 마비 이면서 감속 상태이상. 이렇게 공존 가능하기 때문임

+

스테이트 패턴으로 코딩 짤 때는
새 클래스 (새로운 스크립트) 를 제작헤애 힌디
클래스 수가 많아지기 때문에 복잡해질 수 있다

 

 

 

 

 

상태 State
지금 현재 부품

전환 Transition
현재 부품이 다른 부품으로 갈아치워짐

이벤트 Event
일, 사건, 상태 전환을 일으키는 외부 입력

동작 Action
그 상태에선 모션을 실행 할거냐 이펙트를 재생할 거냐

 

 

 

 

i interface 를 사용

 

점프전 스쿼트 ,시작

점프 공중 체공 , 중간

점프 착지, 끝

 

이렇게 시작 중간 끝 세개로 나눔

 

 

+

 

 

실 구현 예시

 

if 플레이어가 땅에 붙어있음이 아닐 경우

점프 상태다

 

if 플레이어 속도가 0.1f 이상이다

움직이니까 걷는 상태다

 

 

반응형
Posted by 이름이 익명
: