본문 바로가기
# 게임/# Unity

FSM #1

by 쁘레레레레레 2020. 8. 4.

기존에 Enemy에게 적용할 용도로 wander.cs를 만들어 적용했었다.

구조는 매우 간단하면서도 뭔가 원시적이었는데, enemy 이하 shade의 하위 오브젝트를 만들어 정해진 반지름 크기에 따라 onTrigger설정이 된 원을 그려서 범위를 만들어주었고

 

평상시엔 랜덤값을 돌려 0,1,2를 나오게 유도해서 0 = left , 1 = stop , 2 = right로 방향 값 + 코 루틴으로 몇 초 동안 이동해주는 방식으로 설정했다. 물론 낙하방지를 위해 cliffDetect라는 변수도 만들어서 처리를 해주었다.

 

스테이지 1의 경우 직접 타일을 찍어줬기에 의도대로 행동을 했지만 랜덤 던전을 만들면서 일이 터졌다.

 

사다리를 보고 기겁한나머지 거기서 벌벌 떨고 있길래(?) 디버깅을 하다가 답이 없다고 느껴서  여기저기 떠돌아다니다가

StateMachineBehaviour라는 것을 발견했고 이를 이용한 FSM도 있길래 참고해서 만들어 봤다.

 

과정을 보니 별것 없는것 같아서 원리만 이해하고 바로 실행에 옮겼다. 일단 내게 알맞은 구조가 필요했고 그에 따라 원본/수정본을 그려놓았다.

 

유니티 애니메이터 그림인데, 악필이다.

검은색이 원본이다. 

1. 대기상태

2. 일정 범위 안에 적(플레이어)가 감지될 경우 뒤쫓는다. (chase)

3. 이후에 또 일정한 범위 안에 (이전 범위보다 더 좁은 범위) 들어온다면 공격 준비 상태가 된다.

4. 그리고 공격!

 

하지만 만일

2-1. chase하다가 정한 범위 안에서 적(플레이어)이 사라진다면 원래 자리로 돌아간다. (back)

 

여기서 필요한건 쫓을건지(isChase) , 돌아갈 건지(isBack) , 방향 값(direction) 정도가 필요한데,

isChase, isBack은 애니메이터 내에 변수로 만들어주었고, 방향 값은 단순 좌우 방향 값을 저장해놓고  값이 음수일 경우 왼쪽을 보게, 양수일 경우 오른쪽을 보게 설정했다.

 

여기서 내 입맛에 맞도록 바꿨는데,

 

아직 만드는 단계라 조금 다듬을 필요가 있다.

1. 대기상태

2. 일정 대기시간이 지났을 경우 현재 방향으로 계속 걸어간다.

2-1. 만일 적(플레이어)이 발견된다면 chase실행

2-2. 범위가 좁혀졌다면 공격준비상태.

2-3. 공격

3. 만일 적(플레이어)이 범위를 벗어났다면 idle로 돌아가게 할 생각이다.

 

이후 코드는 후술 ~


StateMachineBehaviour 작동 순서

참고 : http://thepulsar.in/code/unity-statemachinebehaviour-%EC%8B%A4%ED%96%89-%EC%88%9C%EC%84%9C/

 


 

'# 게임 > # Unity' 카테고리의 다른 글

[Project Freud] 유니티개발 두번째 게임 (취소됨)  (0) 2022.02.17
FSM #2  (0) 2020.09.14
Procedural Dungeon Generation in Unity #4 점검  (0) 2020.07.30
움직임 입력값  (0) 2020.07.29
사다리 만들기  (0) 2020.07.29