유한 상태 머신(Finite State Machine, FSM)
- 프로그래밍에서 특정 상태들 사이의 전환을 관리하는 모델
- 게임 개발에서 캐릭터의 행동, 게임 레벨의 상태, UI 흐름 관리 등 다양한 곳에 활용
- 미리 상태 간의 관계를 그리면 수월한 코드 작성 가능
여기서는 적 몬스터를 구현할 때 사용할 예정
왜 필요할까?
- 플레이어 캐릭터는 사용자의 입력에 따라 능동적으로 행동할 수 있지만, 적 몬스터나 NPC 등은 개발자가 정의한 로직에 따라 자동으로 행동하게 된다.
- 이로 인해 유한 상태 머신(FSM)과 같은 체계적인 구현 방식을 통해 적 몬스터 등의 행동 패턴을 효과적이고 세심하게 설계한다면, 플레이어는 다양한 경험으로 인한 게임의 재미와 몰입감을 얻을 수 있다.
사실 플레이어에게도 잘 구현하면 좋다.
유한 상태 머신과 enum
을 사용하여 적 몬스터의 상태를 구현
적 캐릭터의 상태를 데이터를 표현해야하는데, 기존 자료형으로는 어려울 때 enum
을 사용.
// 적의 상태 목록
public enum MonsterState {
Wait,
Chase,
Attack
}
public class Enemy : MonoBehaviour
{
// 상태를 담아둘 변수를 초기화
public MonsterState currentState = MonsterState.Idle;
private void Update() {
switch (currentState) {
case MonsterState.Idle:
// 대기(idle) 상태에서 할 행동
break;
case MonsterState.Move:
// 이동(move) 상태에서 할 행동
break;
case MonsterState.Attack:
// 공격 상태에서 할 행동
break;
}
}
void Idle(){ // 기본 상태일 때 로직 }
void Move(){ // 이동 상태일 때 로직 }
void Attack(){ // 공격 상태일 때 로직 }
}
이후 당장 떠오르는 다음 로직 구현을 생각해보면
플레이어와의 거리 계산하는 로직:
ex) 플레이어 위치와 거리를 변수로 선언하고, 플레이어 transform 컴포넌트를 가져오고, 플레이어와 적 사이 거리를 계산하기 등등,,,
거리에 따른 상태 전환
ex) Idle() 메서드 내에서 거리에 따른 다음 상태 변환을 구현.
- FSM 방식을 활용하여 코드를 구성하면, 적 몬스터의 행동을 세밀하게 제어할 수 있으며, 게임 플레이에 다양성을 부여 할 수 있다.