[C#, 유니티] Unity3D_RPG 상태패턴머신 (디자인패턴)

2022. 8. 24. 17:26코딩 2막 <C#개념편>

728x90

상태패턴(state pattern)

상태패턴의 사전적 의미

객체의 내부 상태에 따라 스스로 행동을 변경할 수 있게 허가하는 패턴으로,
이렇게 하면 객체는 마치 자신의 클래스를 바꾸는 것처럼 보입니다

 

상태패턴의 장점
 장점1. 다른 상태에 대한 내용들을 전혀 고려하지 않아도 프로그램 작성에 영향받지 않음
장점2. 확장성이 용이 (새 기능이 추가되어도)
 장점3. 내 상태에 대해서만 파악하면 되기 때문에 공략이 유리
장점4. 불필요한 조건문을 줄일 수 있음
상태패턴의 단점
 단점1. 상태를 단 하나만 지정해줄 수 있기때문에 중복처리를 해야하는 상태는 적용하기 어려움 (ex. 점프중에 맞는다)
 단점2. 상태가 많아지면 조건문 처리가 복잡해짐
상태패턴은 언제 적용하는게 좋은가?
상태패턴을 적용함으로 앞으로 조건들에 대해서 행동들이 복잡해질 것 같을때 사용하면 좋다.

앞으로 플레이어같이 복잡하게 될 것 같은 녀석들은

애니메이터를 추가해서

상태전환을 하는 입력정보는 플레이어스크립트에 저장해두고

상태전환을 하는 행동을 추가하는것은 Add Behaviour을 통해 상태패턴을 저장해두기로 한다

 

움직이기위한 내용, 점프만을 위한 내용 등 다양한 특정 행동들을

상태패턴으로 만들고 관리하는것이 유리하다


코드리뷰

 

코드리뷰

인스펙터

 

스크립트

 

상태패턴을 만들때 해당 에니메이션은 다음과 같은 세 가지의 이벤트를 가지도록 한다

 

1. Enter 함수에는 상태가 바뀌자마자 하고 싶은 행동을 넣는다

2. Update는 매 프레임마다 하고 싶은 행동을 넣는다

3. Exit에는 다른 상태로 바뀌기 직전에 하고 싶은 행동을 넣는다 

 

 

1. PlayerController.cs

2. PlayerNormalMoveBehaviour : StateMachineBehaviour

다음은 평소 플레이어의 이동과 점프 그리고 배틀모드로 진입하기 위한 행동에 대해서 구현한 상태패턴입니다

3. PlayerJumpBehaviour : StateMachineBehaviour

다음은 플레이어의 점프에 대한 행동을 구현하는 상태패턴에 대한 코드리뷰입니다

전투중에서 창과 방패를 꺼내는 애니메이션을 넣고

전투중일때의 상태패턴을 추가했습니다

(기존 상태패턴과 다른점은 점프를 누를때 구르는 모션)

 

3. PlayerBeginBattleBehaviour : StateMachineBehaviour

전투모드 전 단계의 상태패턴

4. PlayerBattleMoveBehaviour : StateMachineBehaviour

전투모드일때의 상태패턴

5. PlayerEndBattleBehaviour : StateMachineBehaviour

전투모드 끝난 상태패턴


전투씬 결과

 

결과

공감해주셔서 감사합니다

 

728x90