[TIL] Unity - 몬스터 AI (2)

MINO·2024년 6월 30일
post-thumbnail

2024-07-01


FSM 구현 방식 수정

프로젝트를 진행하며, FSM 을 통해 각각 Player, NPC, Enemy 를 나누어 구현하고 있었다.

코루틴을 사용하는 방식으로 몬스터 AI 가 잘 동작하는지 확인해보았고,
리팩토링을 통해 BaseState 를 상속 받는 FSM 방식으로 수정하기 시작하였다.

그 이유는, Player 의 FSM 구현 방식이 BaseState 를 상속 받는 방식이라서
같은 방식으로 동작되는 편이 추후 리팩토링이나 디버그 시에도 용이할 것 같기 때문이다.

NavMeshAgent 를 사용하는 NPC 를 담당한 팀원과 함께 여러 실험을 해보며
한 가지 상태씩 차근차근 동작 방식을 수정해나갔다.


FSM 와이어프레임 수정

동작 방식을 수정하며 와이어프레임도 일부 변경되었다.


탐지 및 공격 범위 로직

몬스터나 NPC 는 대기, 이동 상태에서 타겟을 탐지하는 detectRange 와
타겟을 탐지한 후, 공격을 할 수 있는 사거리 attackRange 가 필요하다.

Collider2D 로 사용하기에는 2가지 모두 Trigger 로 사용해야하기 때문에 불가능하였다.

NavMeshAgent 의 Remaining Distance 메서드를 사용하는 방법도 있지만,
타겟과 NavMeshAgent 사이에 벽이 있는 경우, 또는 타겟 사이에 다른 장애물이 존재할 때의 예외처리가 되지 않아 고민을 조금 더 해봐야할 것 같다.


TIL 마무리

리팩토링을 하기 위해서는,
한 가지 기능을 다른 방식의 코드로 수정하며,
기능의 변화가 없어야 한다.

또한, 그 과정에서 이전에는 찾지 못한 버그도 발견하여
시간이 오래 걸리고 있지만, 더 좋은 코드를 짜기 위한 의미 있는 시간이라고 생각하며 차근차근 코드를 수정해야할 것 같다.

profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글