우리 조는 마인크래프트 같은 생존게임을 만들기로 했다. 내 역할은 여러 종류의 적 AI를 구현하는 것이다. 적은 여러 야생동물들로 아래와 같이 구성했다.
Aggressive Animals (선공하는 동물)
Passive Animals (공격 O, 선공 X)
Non-attack Animals
동물들은 다음과 같은 상태를 가진다.
위에서 정한 상태를 바탕으로 디자인 패턴 중 하나인 상태 패턴을 이용해 적의 AI를 구현하는 것을 목표로 잡았다. 그래서 먼저 상태 패턴에 대해 알아보자.
객체의 상태에 따라 다른 행동을 하는 상황에서 상태를 객체화하여 현재 상태를 나타내는 객체에게 행동을 위임한다.
다음 세 가지를 핵심적으로 작성해야 한다.
public enum AIState
{
Idle,
Wander,
Alerted,
Chase,
Attack,
Escape,
Dead
}
---
public class StateContext
{
public IState currentState;
private readonly Creature _creature;
public StateContext(Creature creature)
{
_creature = creature;
}
public void Transition(IState newState)
{
if (currentState != null) currentState.OnStateExit();
currentState = newState;
currentState.OnStateEnter();
}
}
// 상태 변경 반영 및 실행
---
public interface IState
{
public void OnStateEnter();
public void OnStateUpdate();
public void OnStateExit();
}
---
public class WanderState : MonoBehavior, IState
AlertedState
ChaseState
AttackState
// 각 상태의 행동 로직 구현
---
public class Creature : MonoBehaviour
{
// 상태 변경 로직 구현
}