2022. 8. 24. 17:26ㆍ코딩 2막 <C#개념편>
상태패턴(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
전투씬 결과
공감해주셔서 감사합니다
'코딩 2막 <C#개념편>' 카테고리의 다른 글
[C#, 유니티] Unity3D_RPG ScriptableObject (Conversation) (0) | 2022.08.26 |
---|---|
[C#, 유니티] Unity3D_RPG 상호작용 (1) | 2022.08.25 |
[C#, 유니티] Unity3D_RPG 애니메이션 (2) | 2022.08.23 |
[C#, 유니티] Unity3D_RPG 레벨디자인, 시네머신 그리고 에니메이션 (1) | 2022.08.22 |
[C#, 유니티] Unity3D_FPS UI (4) | 2022.08.18 |