Ruya Games

Scene 이동시 이전 씬의 정보 저장 본문

Unity

Scene 이동시 이전 씬의 정보 저장

SadEvil 2023. 11. 30. 20:13

이전 씬의 정보를 저장하는 방법은 크게 2가지가 있는데요.

1. Static Class에 저장

사실 이전 씬의 정보를 저장한다기보단 메모리에 저장되있기때문에 Scene을 변경해도 클래스가 사라지지 않습니다.

다만 MonoBehaviour를 상속받을 수 없고, 씬 안의 오브젝트를 제어할 수 없기 때문에 어느정도 제약이 있습니다.

public static class StaticClass {
	public const float StaticValue = 1.0f;
	public string StaticString;
}

2. DontDestroyOnLoad() 사용

DontDestroyOnLoad()는 본인 클래스와 본인 클래스가 컴포넌트로 추가된 게임 오브젝트를 씬 전환시에도 사라지지 않도록 합니다.

public class DontDestroyClass : MonoBehaviour {
	void Awake() {
    	DontDestroyOnLoad(this.gameObject)
	}
}

이렇게 입력해두면 해당 스크립트가 추가된 컴포넌트는 씬이 전환되어도 사라지지 않습니다.

다만 해당 오브젝트가 있던 씬에 다시 진입하게 되면 같은 오브젝트가 2개가 되는 문제가 발생합니다(또 다시 들어오면 3개, 4개...).

따라서 DontDestroyOnLoad를 사용할때는 다시는 들어오지 않을 씬에 해당 오브젝트를 추가해두거나, Singleton패턴으로 오브젝트의 중복 생성을 제어해야합니다.

public class DontDestroyClass : MonoBehaviour {
    public static DontDestroyClass instance = null;
    
    void Awake() {
    	// DontDestroyClass 인스턴스가 이미 있는지 확인하고, 없다면 현재 인스턴스를 할당합니다.
        if (instance == null) instance = this; 
         
        // 인스턴스가 이미 있는 경우 오브젝트를 제거합니다.
        else if (instance != this) Destroy(gameObject);
            
        DontDestroyOnLoad(gameObject); 
    }
}