오늘은 이미 작성된 Enemy.cs를 활용해서 다양한 패턴을 가진 적을 구현하고 싶어서 사용한 방법을 작성하려고 한다.
현재 적은
1. 대기 상태
2. 인식 상태
3. 추적 상태
4. 공격 상태
5. 복귀 상태
6. 피격 상태
7. 순찰 상태
이렇게 구현되어 있는데, 여기서 대기 상태와 순찰 상태는 적마다 서로 구분해서 사용한다.
즉 어떤 적은 대기 상태로 가지 않고, 순찰 상태로 가지 않는데 서로 선언이 되어 있는 상태이다.
내가 선택한 개선 방법은 대기 상태와 순찰 상태의 부모를 만들어서 원하는 enum 타입에 맞춰서 생성자를 사용하는 방식이다.
| 개선 방법 |
|---|
![]() |
![]() |
![]() |
이렇게 개선하게 되면서 하나의 문제가 생겼는데, 저번에 개선한 적 공격방식이
Idle -> Detect -> Chase -> Idle -> Attack -> Idle으로 변경하게 되었는데 여기서 중간에 있는 Idle이 Patrol이라면 좌우로 막 움직이는 현상이 생긴 것이다.
그래서 아예 Battle 상태를 추가하여 해결하였다.
그래서 현재는
Idle -> Detect -> Chase -> Battle -> Attack -> Battle로 흐름을 다시 정리하였다.
| EIdleState |
|---|
![]() |
| EnemyDetectState |
|---|
![]() |
| EnemyChaseState |
|---|
![]() |
| EnemyBattleState |
|---|
![]() |
| EnemyAttackState |
|---|
![]() |
앞으로 이러한 방식으로 상속을 사용하여, 지상에서 움직이는 몬스터, 하늘을 나는 몬스터를 구분짓고 공격 타입에 맞춰서 상속을 하여 코드를 최대한 재활용하는 방식으로 코드를 작성할 것 같다.