플레이어가 무기나 상태에 따라 공격 방식이 달라지게 하려면 어떤 디자인 패턴이 유용할까?
꾸준 실습에 나온 내용을 바탕을 미루어 보아 전략 패턴이 이 방식에 적합하다는 것으로 보인다.
그럼 전략 패턴은 어떤식으로 만들어질까?
전략 패턴은 알고리즘을 캡슐화하여 동적으로 알고리즘을 교체할 수 있게 하는 디자인 패턴이라고 한다.
예시에 나온 코드는 다음과 같다.
public interface IWeaponState
{
void Attack();
}
public class BowState : IWeaponState
{
public void Attack()
{
Debug.Log("Bow Attack");
}
}
public class SwordState : IWeaponState
{
public void Attack()
{
Debug.Log("Sword Attack");
}
}
public class CommandPatten : MonoBehaviour
{
private IWeaponState _weaponState;
private void Update()
{
if (Input.GetKeyDown(KeyCode.Alpha1))
{
_weaponState = new BowState();
}
else if (Input.GetKeyDown(KeyCode.Alpha2))
{
_weaponState = new SwordState();
}
if (Input.GetKeyDown(KeyCode.Space))
{
_weaponState.Attack();
}
}
}
인터페이스 IWeaponState를 상속받는 무기 클래스를 만들고 각각의 공격 방식을 설계한다.
그리고 플레이어가 가지고 있는 인터페이스를 교체하는 알고리즘을 만들고 현재 들고있는 IWeaponState를 가진 클래스의 Attack 함수를 호출한다.