게임에서 단 하나 밖에 없는 객체를 사용할 때 유용하다.
예시를 들어 설명하자
hAxis = Input.GetAxisRaw("Horizontal");
vAxis = Input.GetAxisRaw("Vertical");
Vector3 MoveVec = new Vector3(hAxis, vAxis, 0);
SystemManager.Instance.Hero.ProcessInput(MoveVec);
여기 플레이어의 이동값을 받는 메서드가 있는 InputController
가 있다
SystemManager.Instance.Hero.ProcessInput(MoveVec);
이 코드에 집중하자
싱글톤으로 생성된 객체를 관리하는 SystemManager
라는 코드가 있다
static SystemManager instance = null;
public static SystemManager Instance
{
get
{
return instance;
}
}
void Awake()
{
if (instance != null)
{
Debug.LogError("SystemManager error! Singletone error");
Destroy(gameObject);
return;
}
instance = this;
}
static 변수인 instance가 null일때(아직 할당 되지 않았을 때) 객체를 넣어줄꺼다.
[SerializeField]
Player player;
public Player Hero
{
get
{
return player;
}
}
아까 코드에서 보았던 Hero
(게임 내애서 플레이어가 실제로 조종할 수 있는 오브젝트를 Hero 라고 함)함수 안에서 플레이어를 반환해준다.
인스팩터 창에서 지정해 줬다
player
스크립트의 ProcessInput
함수를 사용할 수 있게 되는 것이다.