디자인 패턴 특강 1부의 개념 정리 시간을 가졌다.
유일한 인스턴스 유지한다.
void Awake()
{
if (instance != null)
{
Destroy(gameObject); //이미 있는 경우 새로운 인스턴스는 파괴
return;
}
instance = this;
}
전역적 접근
public class ClassExample : MonoBehaviour
{
public static ClassExample instance;
// 생략
}
이렇게하면 생성된 하나의 인스턴스 메모리에 상주하며 어디서든 접근할 수 있으며
새로운 인스턴스
골프에서 공을 친다는 행위는 동일하게 하되, 용도에 맞는 채를 바꿔 사용함으로써
공을 멀리 보내거나 가까운 목표로 세밀하게 조절해서 치는 것과 같음
// 전략 인터페이스
public interface IRideStrategy
{
void Ride();
}
public class Bicycle : IRideStrategy
{
public void Ride()
{
Debug.Log("Ride Bicycle");
}
}
public class Car : IRideStrategy
{
public void Ride()
{
Debug.Log("Ride Car");
}
}
public class Helicopter : IRideStrategy
{
public void Ride()
{
Debug.Log("Ride Helicopter");
}
}
public class Person : MonoBehaviour
{
IRideStrategy ridableStrategy;
public void SetRideStrategy(IRideStrategy strategy)
{
ridableStrategy = strategy;
}
public void Ride()
{
ridableStrategy.Ride();
}
}
public class StateMachine
{
IState curState;
public void ChangeState(IState newState)
{
if(curState != null)
curState.Exit();
curState = newState;
curState.Enter();
}
// MonoBehaviour의 Update가 아님.
// 이 클래스 아무것도 상속받지 않고 있기에 별개의 메서드로 봐야 함.
public void Update()
{
if(curState != null)
curState.Excute();
}
}
public interface IState
{
// 상태들에 들어갈 때, 나올 때, 매 프레임이 중요
void Enter(); // 상태에 들어갈 때 == OnEnable()
void Excute(); // 매프레임 실행할 때 == Update()
void Exit(); // 상태에서 나올 때 == OnDisable()
}
public class IdleState : IState
{
public void Enter()
{
// Idle 상태 시작 시 호출
}
public void Excute()
{
// Idle 상태 중 호출
}
public void Exit()
{
// Idle 상태 종료 시
}
}
public class WanderState : IState
{
public void Enter()
{
// Wander 상태 시작 시 호출
}
public void Excute()
{
// Wander 상태 중 호출
}
public void Exit()
{
// Wander 상태 종료 시
}
}
#내일배움캠프 #스파르타내일배움캠프 #스파르타내일배움캠프TIL