유니티 DontDestroyOnLoad 씬 반복 전환 시 활용법

2020. 7. 8. 22:25유니티실습

반응형
728x170

안녕하세요 유니티 비기너입니다.

이번 시간에는 DontDestroyOnLoad를 이용하여 씬을 반복해서

전환하는 경우 활용법 몇 가지에 대해 알아보겠습니다.

 

First Scene -> Second Scene 이동하는 경우

public class SceenController : MonoBehaviour
{
  private void Awake() {
    DontDestroyOnLoad(gameObject);
  }
}

DontDestroyOnLoad를 이용하여 씬 전환 시에도 오브젝트를 유지하는 코드입니다.

이 부분에선 크게 고려해야 할 부분은 없습니다.

 

 

Seconde Scene -> First Scene 이동하는 경우

public class SceenController : MonoBehaviour
{
  private void Awake() {
  	
    var obj = FindObjectsOfType<SceenController>();

        if (obj.Length == 1) {
            DontDestroyOnLoad(gameObject);
        } else {
            Destroy(gameObject);
        }
  }
}

이전 씬으로 돌아가는 경우 DontDestroyOnLoad를 이용해

 

유지시킨 오브젝트와 기존에 존재했던 오브젝트가 남아있기 때문에 

 

var type을 이용하여 SceenController들을 배열에 담고, 1개 이상인 경우 파괴시킵니다.

 

이 코드에 주의할 점은 해당 스크립트가 다른 오브젝트도 추가적으로 할당되어있다면

 

파괴 시 해당 정보를 잃을 수 있습니다. 

 

public class SceenController : MonoBehaviour
{
  public void SceenChange() {
  
        SceneManager.LoadScene("FirstScene");

        if(SceneManager.GetActiveScene().name == "SecondScene") {
            Destroy(gameObject);
        }
    }
}

위와 같은 상황을 고려하기 싫으시다면 씬을 전환할 때 파괴시키는 방법도 가능합니다.

 

DontDestroyOnLoad를 이용하시게 되면 다양한 변수들이 생기기 때문에

오브젝트의 중복처리, 유지 시점, 파괴 시점들을 잘 고려하셨으면 좋겠습니다.

 

반응형
그리드형