본문 바로가기
Unity

Unity 에서 지체없이 Play Mode 로 진입하는 방법

by Oz Driver 2025. 4. 14.

Unity에서 Play Mode로 진입할 때마다 몇 초간 진행 바가 나타난 후 실행이 시작되는 경험을 해보신 적이 있을 것입니다. 이는 Unity가 매번 스크립트와 씬을 초기화하는 과정 때문입니다. 단순한 테스트를 반복하는 개발 과정에서는 이 대기 시간이 다소 번거롭게 느껴질 수 있습니다.

 

이러한 경우에는 Edit > Project Settings > Enter Play Mode Settings 항목에서 제공하는 "Reload Domain" 및 "Reload Scene" 옵션을 통해 실행 속도를 개선할 수 있습니다. 이 두 항목의 체크를 해제하면, 매번 Play Mode 진입 시 초기화 과정을 생략하고 즉시 실행이 가능합니다. 진행 바 없이 곧바로 실행되므로, 반복 테스트 시 매우 유용합니다.

 

 

 

Reload Domain

Unity에서 말하는 Domain은 .NET의 AppDomain, 즉 C# 스크립트가 실행되는 런타임 환경을 의미합니다. Unity는 기본적으로 Play Mode로 진입할 때 이 AppDomain을 새로 생성하여, static 변수, 싱글톤 인스턴스, 이벤트 등록 상태 등을 모두 초기화합니다. 이를 통해 항상 초기 상태에서 게임이 시작되도록 보장합니다.

하지만 "Reload Domain" 옵션을 해제할 경우, 이 런타임 환경이 초기화되지 않고 그대로 유지됩니다. 따라서 static 변수나 싱글톤 인스턴스에 저장된 값들이 이전 상태 그대로 남아 있게 되며, 이로 인해 예상치 못한 동작이 발생하거나 이벤트가 중복으로 호출되는 등의 문제가 생길 수 있습니다.

 

문제가 발생하지 않도록 하려면?

이러한 기능들을 안전하게 활용하기 위해서는 명확한 초기화 코드 작성이 중요합니다. 예를 들어, static 변수를 사용하는 클래스의 경우, 아래와 같이 명시적인 초기화 메서드를 구성하는 것이 좋습니다:

public static class GameState
{
    public static int Score;

    public static void Reset()
    {
        Score = 0;
    }
}

 

그리고 Play Mode가 시작될 때 이 메서드를 호출하는 구조를 마련하신다면, 초기화 누락으로 인한 문제를 예방할 수 있습니다. 싱글톤 클래스의 경우에도 ResetState()와 같은 메서드를 별도로 두어 초기화를 구분해 주는 것이 바람직합니다.

 

 

Reload Scene

"Reload Scene" 옵션을 해제하면, 현재 열려 있는 씬을 다시 로드하지 않습니다. 겉보기에는 씬이 Play Mode 중 변경된 상태 그대로 유지되는 것처럼 보일 수 있으나, Unity는 여전히 Play 종료 시 씬을 에디터에 저장된 상태로 복원합니다. 즉, 씬을 완전히 로드하지는 않지만, 변경된 상태가 저장되거나 유지되지는 않기 때문에 변화는 일시적입니다.

이 점에서 “씬을 리로드하지 않는다”는 표현은 오해를 부를 수 있는데, 정확히는 씬 데이터를 메모리에서 지우지 않고 다시 불러오지 않을 뿐, Unity는 에디터에 저장된 상태로 되돌리는 구조를 유지하고 있다는 점을 유의하셔야 합니다.

 

 

마무리

"Reload Domain" 및 "Reload Scene" 옵션을 해제하면 테스트 속도를 획기적으로 높일 수 있습니다. 그러나 이로 인해 발생할 수 있는 초기화 문제를 간과한다면, 작은 실수도 예상치 못한 버그로 이어질 수 있습니다.

따라서 이 기능들을 적극적으로 활용하고자 하신다면, 개발 초기 단계부터 명확한 초기화 구조를 설계하고 관리하는 습관이 반드시 필요합니다.