[내일배움캠프] 적 상태 머신 구현하기(인지, 추적, 복귀)

이준영·2025년 7월 1일
post-thumbnail

오늘은 새로 배운건 없어서, 일단 오늘 작업한 것의 일부분을 정리하기로 하였다.

적 SA 구조

적 SA 구조
  • Enemy : 적과 관련된 모든 컴포넌트를 총과하고, StateMachine을 실행시켜주는 역할을 한다.

  • EnemySpawnPoint : 몬스터가 생성되는 위치이다. 인식된 플레이어의 정보를 가져오고, enemy에게 넘겨준다.

  • EnemyCodition : 몬스터의 체력과 방어력 등의 정보를 다룬다. IDamagable을 상속하여 피해 입었을 때 처리를 이곳에서 한다.

  • EnemyAnimationData : 애니메이션에 필요한 string 값을 해쉬 정보로 변환한다.

적 상태머신
  • EnemyStateMachine : StateMachine을 상속 받아 Enemy의 상태를 변환하거나, 실행시키는 역할을 한다.

  • EnemyBaseState : IState를 상속 받아 모든 적 상태를 정의의 기초가 된다.

  • 이 중에서 오늘 내가 Detect, Chase, Return을 구현하게 되었다.

Detect

  • DetectState를 구현하기 전에 유저를 인식하기 위한 EnemySpawnPoint부터 구현하였다.
EnemySpawnPoint
  • SpawnPoint이기 때문에 몬스터를 먼저 생성하는 Spawn을 정의하였다.(monster 변수에는 Enemy 컴포넌트, collider 컴포넌트, rigidbody2d 컴포넌트를 넣은 프리펩을 넣어주었다.)

  • 이후 OnTrigger를 이용하여 플레이어가 접촉하면 적의 타겟 변수에 넣어주고

  • 빠져나갔다면 일정시간 동안 더 추적을 할 수 있게 잠시 텀을 주고 타겟을 비워주었다.(기획자분 의도)

  • 초록색 범위는 isTrigger가 체크된 BoxCollidr2D로 범위를 설정해 주었다.

EnemyDetectState
  • Detect 상태의 역할은 발견한 플레이어를 향해 몸을 돌리고 일정 시간이 지난 후 추적상태로 바뀌는 것이다.

Chase

EnemyChaseState
  • 추적 상태이다. 추적 상태에서는 타겟을 향해서 이동을 시작한다.

  • 여기서 복귀 상태로 바뀌는 두 가지 경우가 있는데,
    하나는 타겟이 탐색 범위 밖으로 나갔을 때이고,
    또 하나는 적이 움직임이 미약할 때, 일정시간이 지나면 복귀 상태가 되는 것이다.

Return

EnemyReturnState
  • _condition.IsInvincible은 현재 무적상태인지를 판단하는 bool 변수이다. 왜냐하면 복귀 상태에서는 대미지를 받지 않기 때문에 저 값을 변경해준다.

  • Return은 스폰포인트를 향해서 몬스터가 이동하는 매서드이다.

  • 그리고 SpawnPoint 근처에 도달하면 다시 Idle 상태로 돌아간다.

소감

이렇게 오늘 구현한 코드를 다시한번 리뷰해보았다. 추적 취소 부분은 주석을 잘 달아줬는데, 다른 부분은 조금 미약해서 개선이 필요해 보인다.

profile
게임 개발자가 되기 위해서 공부하는 중입니다.

0개의 댓글