반응형
상태 패턴란 ??
상태 패턴은 개체가 클래스를 변경한 것처럼 내부 상태가 변경될 때 개체가 동작을 변경하도록 하는 동작 디자인 패턴입니다.
게임을 위한 적 AI를 만든다고 상상해 보십시오. 적은 순찰, 플레이어 추격, 공격과 같은 여러 상태를 가질 수 있습니다. 이러한 동작은 상당히 다르며 상태 패턴을 사용하지 않으면 코드가 여러 'if' 또는 'switch' 문으로 빠르게 복잡해질 수 있습니다.
상태 패턴이 빛나는 곳입니다. 이를 통해 서로 다른 동작을 별도의 클래스로 캡슐화하고 런타임에 전환할 수 있습니다.
Unity에서 상태 패턴 구현
플레이어를 순찰하거나 추격할 수 있는 간단한 적 AI로 상태 패턴을 설명하겠습니다.
첫째, 적 상태에 대한 추상 기본 클래스가 필요합니다.
csharpCopy code
public abstract class EnemyBaseState
{
public abstract void EnterState(Enemy enemy);
public abstract void Update(Enemy enemy);
}
그런 다음 구체적인 상태 클래스를 만듭니다. 다음은 PatrolState의 예입니다.
csharpCopy code
public class PatrolState : EnemyBaseState
{
public override void EnterState(Enemy enemy)
{
// Any setup code for the Patrol state
}
public override void Update(Enemy enemy)
{
// Code to make the enemy patrol around
}
}
다음으로 'Enemy' 클래스가 있습니다. 이 클래스에서는 현재 상태를 추적하고 Update 메서드를 현재 상태로 위임합니다.
csharpCopy code
public class Enemy : MonoBehaviour
{
private EnemyBaseState currentState;
public void TransitionToState(EnemyBaseState state)
{
currentState = state;
currentState.EnterState(this);
}
private void Update()
{
currentState.Update(this);
}
}
상태 사이를 전환하려면 새 상태 인스턴스로 TransitionToState 메서드를 호출하기만 하면 됩니다. 'Enemy' 클래스는 각 상태의 세부 사항을 알 필요가 없습니다. 동작을 현재 상태 개체에 위임할 뿐입니다.
결론
상태 패턴은 특히 복잡한 게임 개체 동작을 관리하기 위한 게임 개발자 도구 상자의 강력한 도구입니다. 코드를 구성하는 깨끗하고 효율적인 방법을 제공하므로 이해, 확장 및 유지 관리가 더 쉬워집니다.
'Unity > Design Pattern' 카테고리의 다른 글
Unity로 이해하는 빌더 패턴 (0) | 2023.09.27 |
---|---|
소프트웨어 개발 3대 원칙 : DRY, KISS, YAGNI (0) | 2023.08.10 |
Unity로 이해하는 옵저버 패턴 (Observer Pattern) (0) | 2023.08.08 |
Unity로 이해하는 팩토리 패턴 (Factory Pattern) (0) | 2023.08.07 |
Unity로 이해하는 어댑터 패턴 (Adapter Pattern) (0) | 2023.08.06 |