본문 바로가기
유니티 공부/Unity

Unity - DontDestroyOnLoad(중복, 겹침 문제)

by 코딩하는 돼징 2023. 6. 9.
반응형

DontDestroyOnLoad

씬을 변경할때 target오브젝트가 파괴되지 않도록 유지해주는 메서드이다.

public static void DontDestroyOnLoad(Object target);

1. 중복되는 문제가 발생

만약 씬 이동시 gameObject가 중복되는 문제가 생길시에는 아래 코드와 같이 다른 Instance가 존재한지 판별한고 이미 존재 한다면 현재 gameObject를 파괴하고 함수를 종료하게 하여 문제를 해결한다.

private void Awake()
{
    if (Instance != this && Instance != null)
    {
        // 다른 Instance가 존재하면 현재 gameObject를 파괴한다.
        Destroy(gameObject);
        return;
    }
    else
    {
        Instance = this;
        DontDestroyOnLoad(gameObject);
    }
}

만약 위와 같이 Destroy을 사용하였는데도 중복되서 나온다면 Destroy(this)으로 설정되었는지 확인한다. 만약 이렇게 되어있다면 아래와 같이 겹치는 문제까지 발생한다.

Destroy(this);

2 겹치는 문제가 발생

그림과 같이 UI가 겹치게 발생되는 경우 Destroy에 해당되는 것이 this인지 gameObject인지 확인해야한다.

01 Destroy(this)

현재 스크립트가 붙어있는 컴포넌트만 파괴되고 게임 오브젝트는 그대로 남게 된다. 그러므로 다른 컴포넌트들은 계속 유지된다. 

Destroy(gameObect)

현재 스크립트가 연결된 게임 오브젝트 자체를 제거한다. 그러므로 게임 오브젝트와 연결된 모든 컴포터는가 함께 파괴된다.

 

만약 겹치는 문제가 발생한다면 Destory(this)로 되어있는지 확인하는 것을 추천한다.

반응형

댓글