이번에 AI 네비게이션의 Agent를 만들어보면서 기존의 Switch Case 문은 상태가 많아질수록 복잡해지고 알아보기 힘들다고 생각되었습니다. 지금까지 쓰고 있던 것도 일종의 FSM 패턴이지만 따로 클래스로 나누어 관리하는 방법을 강의에서 보고 리팩토링 하는 작업을 해보았습니다.
일단 하루를 마치기 전 튜터님께 피드백을 받아 Switch case 문에서 처리하던 상태변경을 각각의 상태에서 자연스럽게 처리되도록 하고 새로 생성한 객체를 더 이상 생성되지 않는 로직을 짜보려합니다.
아래는 현재의 변경 로직이며 이것을 각각 상태 내부에서 ChangeState를 호출하는 식으로 변경해볼 예정입니다.
그렇다면 강의를 다시 정독하는 것이 우선 순위기에 오늘 TIL은 간단하게 마치겠습니다.
ublic void SetState(ButlerState state) //스위치문을 각자의 상태에서 처리하도록 변경
{
aiState = state;
switch (aiState)
{
case ButlerState.Idle:
stateMachine.ChangeState(new IdleState(this));
break;
case ButlerState.Patrolling:
stateMachine.ChangeState(new PatrollingState(this));
break;
case ButlerState.Suspect:
stateMachine.ChangeState(new SuspectState(this));
break;
case ButlerState.Searching:
stateMachine.ChangeState(new SearchingState(this));
break;
case ButlerState.Chasing:
stateMachine.ChangeState(new ChasingState(this));
break;
}
}
변경 예정중인 코드 강의를 보며 개선점을 더 찾아보자
public class IdleState : EnemyBaseState
{
public IdleState(Butler butler) : base(butler)
{
}
public override void Enter()
{
}
public override void Exit()
{
}
public override void Update()
{
//상태 자체에서 다른 상태로의 변경 로직을 작성해볼 예정
}
}
'TIL' 카테고리의 다른 글
2024 11 20 TIL (0) | 2024.11.20 |
---|---|
2024 11 19 TIL (2) | 2024.11.19 |
2024 11 15 TIL (1) | 2024.11.15 |
2024 11 14 TIL (0) | 2024.11.14 |
2024 11 13 TIL (0) | 2024.11.13 |