Unity에서 단일 객체를 만드는 데 주로 사용되는 여러 비디오와 자습서를 보았습니다. 주로 단일 객체 GameManager
를 인스턴스화하고 유효성 검사하는 데 다른 접근 방식을 사용하는 것으로 보입니다.
이것에 대한 올바른 또는 선호되는 접근법이 있습니까?
내가 만난 두 가지 주요 예는 다음과 같습니다.
먼저
public class GameManager
{
private static GameManager _instance;
public static GameManager Instance
{
get
{
if(_instance == null)
{
_instance = GameObject.FindObjectOfType<GameManager>();
}
return _instance;
}
}
void Awake()
{
DontDestroyOnLoad(gameObject);
}
}
둘째
public class GameManager
{
private static GameManager _instance;
public static GameManager Instance
{
get
{
if(_instance == null)
{
instance = new GameObject("Game Manager");
instance.AddComponent<GameManager>();
}
return _instance;
}
}
void Awake()
{
_instance = this;
}
}
두 가지의 주요 차이점은 다음과 같습니다.
첫 번째 접근 방식은 게임 객체 스택을 탐색하여 인스턴스가 한 GameManager
번만 발생하거나 발생해야하는 인스턴스를 찾으려고 시도 하지만 개발 중에 장면의 크기가 커짐에 따라 매우 최적화되지 않은 것처럼 보입니다.
또한 첫 번째 방법은 응용 프로그램이 장면을 변경할 때 객체가 삭제되지 않도록 표시하여 장면간에 객체가 유지되도록합니다. 두 번째 접근 방식은이를 준수하지 않는 것 같습니다.
두 번째 방법은 게터에서 인스턴스가 null 인 경우와 같이 이상한 것으로 보이며, 새로운 GameObject를 만들고 GameManger 컴포넌트를 할당합니다. 그러나이 GameManager 컴포넌트가 씬의 오브젝트에 이미 연결되어 있지 않으면 실행할 수 없으므로 혼란이 생길 수 있습니다.
권장되는 다른 방법이나 위의 두 가지 방법이 있습니까? 싱글 톤에 관한 많은 비디오와 튜토리얼이 있지만 둘 다 다르기 때문에 둘 사이의 비교를 이끌어 내기가 어렵 기 때문에 어느 것이 가장 좋거나 선호되는 접근법인지에 대한 결론입니다.
GameManager
아니라, 단지 하나의 객체 인스턴스를 보장하는 방법과 그것을 시행하는 가장 좋은 방법입니다.