유니티에서 씬이 변경 될 때는 일반적으로 static으로 선언된 변수를 제외하고 모든 데이터가 소실된다. 씬이 변경되더라도 유지되어야 하는 데이터와 오브젝트는 어떻게 처리할까?
유지시키고 싶은 데이터를 가지는 오브젝트와 스크립트를 생성한다.
public static키워드로 전역에서 참조할 수 있는 객체의 인스턴스를 선언한다.
DontDestroyOnLoad(gameObject)를 통해 씬이 넘어갈 때 gameObject가 파괴되는 걸 막는다.
인스턴스가 이미 할당되었다면 새로 생성되는 gameObject를 파괴해서 여러개의 gameObject가 생성되는 걸 막는다.
필요한 곳에서 오브젝트의 인스턴스로 접근해서 필요한 데이터를 사용한다.
예시
public class MainManager : MonoBehaviour
{
public static MainManager Instance;
public Color TeamColor;
private void Awake()
{
if (Instance != null)
{
Destroy(gameObject);
return;
}
Instance = this;
DontDestroyOnLoad(gameObject);
}
}