[Tip] 유니티(Unity) 개발 속도 획기적으로 줄이는 방법 : Enter Play Mode

2025. 8. 28. 00:43·Unity

너무 자주 등장하는 Reload Script Assemblies 팝업 화면

유니티 툴을 사용하게 되면 가장 오랜 시간을 소요하는 것 중에 하나가 바로 에디터에서 플레이를 실행했을 때 어김없이 등장하는 `Reload Script Assemblies` 팝업 화면일 것이다. 프로젝트가 크지 않다면 그렇게 큰 문제가 아니겠지만 스크립트나 파일들이 조금이라도 많아진다면 이 시간은 점점 길어지고, 이는 곧 개발 생산성 저하로 이어지게 된다. 단순히 몇 초의 문제가 아니라, 테스트를 위해 하루에도 수십 번씩 많게는 수백 번씩 반복되는 대기 시간은 작업의 흐름을 끊고 효율을 떨어뜨린다.

가장 자주 보게되는 유니티 에디터 플레이 모드 실행시 스크립트 리로드 화면
가장 자주 보게되는 유니티 에디터 플레이 모드 실행시 스크립트 리로드 화면

 

다음 상황을 한번 가정해 보겠다. 

  • 6개월짜리 프로젝트 개발, 한 달에 20일 작업
  • 하루에 100번 정도 유니티 에디터 플레이 모드 실행 (실제 횟수는 더 많을 것이다.)
  • 1회 유니티 에디터 플레이 모드 진입에 약 3초 정도 소요된다고 가정 (Unity6, Macbook Pro M1 Max, URP 기본 프로젝트)
  • 총 소요 시간 = 100회 * 3초 * 20일 * 6개월  = 36,000초 = 10시간
총 소요 시간 = 100회 * 3초 * 20일 * 6개월 = 36,000초 = 10시간

 단순 계산으로 유니티 플레이 버튼을 눌러놓고 대기하는 시간으로 10시간이라는 시간을 사용하는 것이다. 한번 실행 시 3초 대기는 빈 프로젝트일 때의 시간으로 스크립트 파일이 수백 개 수천 개 있는 실제 프로젝트에서는 이보다 훨씬 오랜 시간을 대기 시간으로 사용할 것이다. 만약 여기에서 회당 2초의 시간을 줄일 수 있다면 총 소요시간은 10시간에서 3시간 정도로 대기 시간을 줄일 수 있다는 결론에 도달한다.

 

유니티는 이런 문제를 해결하기 위한 `Enter Play Mode` 기능을 제공하고 있다. 이 설정을 제대로 활용하면 플레이 모드 진입 시간을 획기적으로 단축하여 더욱 빠르고 쾌적한 개발 환경을 구축할 수 있다.

 


 

Enter Play Mode 란 무엇인가?

`Enter Play Mode`은 유니티 2019.3 버전부터 정식으로 도입된 기능으로, 플레이 모드 진입 시 발생하는 불필요한 스크립트 도메인 리로드(Domain Reload), 즉 `Reload Script Assemblies` 과정을 제어하는 설정이다.

일반적으로 유니티는 스크립트가 변경될 때마다 C# 코드를 다시 컴파일한다. 이 컴파일이 끝나면, 유니티는 `Reload Script Assemblies`라는 과정을 거쳐 새로운 스크립트 어셈블리를 메모리에 로드한다. 이 과정은 모든 스크립트의 정적 변수, 싱글톤 객체 등 C# 도메인에 속한 모든 상태를 초기화하고 재시작하게 되는데, 여기서 많은 시간이 소요된다.

Enter Play Mode의 리로드 기능을 사용하면 이 `Reload Script Assemblies` 과정을 생략하거나 최적화하여 플레이 모드 진입 속도를 극적으로 높일 수 있다. 스크립트를 수정하면 첫 번째는 컴파일이 반드시 발생하지만, 이후부터는 플레이 모드 진입 시 이 리로드 과정이 생략되어 이전에 비해 매우 빠르게 실행된다. 작은 프로젝트의 경우에는 누르는 즉시 실행이 된다.


Enter Play Mode 활성화하기

이 설정은 유니티 에디터의 `Project Settings`에서 찾을 수 있다.

  1. 유니티 에디터 메뉴에서 Edit > Project Settings를 선택한다.
  2. Project Settings 창이 열리면 왼쪽 탭에서 Editor 항목을 클릭한다.
  3. Enter Play Mode Settings 섹션을 찾는다.

유니티 버전에 따라 이 부분이 약간 차이가 있다.

Unity 6 버전에서는 Dropdown 메뉴로 선택할 수 있고 그 이전 버전에서는 Toggle 버튼으로 선택할 수 있다.

 

Unity 2023 이하 버전

우선 `Enter Play Mode Options` 항목을 체크하여 활성화하고 이곳에 있는 두 가지 Domain 및 Scene 리로드 체크박스를 해제하여 비활성화하면 된다.

  • `Reload Domain` : 플레이 모드 진입 시 도메인 리로드를 진행한다. 이 옵션을 `체크 해제`하면 스크립트 간의 상태가 유지되므로 매우 빠르게 플레이 모드로 진입할 수 있다.
  • `Reload Scene` : 플레이 모드 진입 시 현재 씬(Scene)을 다시 로드한다. 이 옵션을 `체크 해제`하면 기존 씬의 상태를 유지한 채로 플레이 모드에 진입하므로, 씬 로드 시간을 줄일 수 있다.

최적의 속도를 위해 보통 이 두 가지 옵션을 모두 비활성화하는 것이 좋다.

 

Unity 2023 이하 버전의 Enter Play Mode Settings
Unity 2023 이하 버전의 Enter Play Mode Settings

Unity 6 버전

이전 버전에서의 토글 기능이 단순히 합쳐져 Dropdown 메뉴로 변경되었다.

  • `Reload Domain and Scene` : 플레이 모드 진입 시 도메인 리로드 및 씬 리로드를 진행한다.
  • `Reload Scene only` : 플레이 모드 진입 시 씬 리로드만 진행한다.
  • `Reload Domain only` : 플레이 모드 진입 시 도메인 리로드만 진행한다.
  • `Do not reload Domain or Scene` : 플레이 모드 진입 시 도메인 및 씬 리로드를 하지 않는다. 최적의 속도를 위해 해당 옵션을 선택한다.

Unity 6 버전의 Enter Play Mode Settings
Unity 6 버전의 Enter Play Mode Settings

 


Enter Play Mode 사용 시 주의 사항

Enter Play Mode에서 Domain 리로드를 하지 않으면 정적 변수(static variables)나 싱글톤(singleton) 객체의 상태가 플레이 모드를 나간 후에도 초기화되지 않고 유지되게 된다. 따라서 이로 인해 원하지 않는 결과를 초래할 수가 있다.

 

다음 코드를 한번 살펴보자. 해당 코드는 임의의 키보드 키를 입력했을 때 카운터가 1씩 증가하는 단순한 코드다. 다만 `counter` 변수는 정적(static) 변수로 Enter Play Mode에 따라 초기화 상태 여부가 전혀 달라지게 된다. 

using UnityEngine;

public class StateResetExample : MonoBehaviour
{
    // 도메인 리로드가 비활성화된 경우, Play 모드 종료 시 이 카운터는 0으로 초기화되지 않는다.
    static int counter = 0;

    void Update()
    {
        if (Input.anyKeyDown)
        {
            counter++;
            Debug.Log("Counter: " + counter);
        }
    }
}

 

일반적으로 해당 코드를 실행하게 되면 `counter` 변수는 Play 모드가 종료되면 처음 상태인 0으로 초기화된다. 하지만 Enter Play Mode를 사용하여 Domain 리로드를 하지 않게 되면 `count` 변수 값은 마지막 값을 유지한 채 다음 Play 모드를 실행하게 된다. 다시 말해 Play 모드를 반복할수록 `count` 변수가 초기화되지 않고 무한히 증가하게 된다.

 

이 문제를 해결하기 위해서는 Play 모드 진입 시 상태를 리셋하는 과정을 추가해야만 한다.

 

다음 코드를 다시 살펴보자.

using UnityEngine;

public class StateResetExample : MonoBehaviour
{
    // 도메인 리로드가 비활성화된 경우, Play 모드 종료 시 이 카운터는 0으로 초기화되지 않는다.
    static int counter = 0;

    [RuntimeInitializeOnLoadMethod]
    static void Init()
    {
        Debug.Log("Resetting counter.");
        // 다음 Play 모드 실행 시 카운터가 0부터 시작하도록 초기화한다.
        counter = 0;
    }

    void Update()
    {
        if (Input.anyKeyDown)
        {
            counter++;
            Debug.Log("Counter: " + counter);
        }
    }
}

 

해당 코드에서는 `[RuntimeInitializeOnLoadMethod]` 어트리뷰트를 사용하여 메서드가 로드될 때 초기화 하게 된다. 이렇게 하면 Play 모드 진입 시 시작 전에 항상 `counter` 변수는 0으로 초기화되는 과정을 거치게 된다. 좀 더 자세한 내용은 공식 문서를 참고하길 바란다.

 

물론 모든 프로젝트에 이 설정이 완벽하게 들어맞는 것은 아니다. 일부 복잡한 스크립트나 외부 플러그인과 충돌이 발생할 수도 있지만, 대부분의 경우 Enter Play Mode를 활용하는 것이 개발 생산성을 높이는 가장 효과적인 방법 중 하나다.

 

문제가 발생하는 경우는 정적(static) 변수 초기화를 안 해서 발생하는 부분이 대부분이므로 이 부분만 유의하여 코드를 작성하면 큰 문제는 없을 것이다.

 


마무리

지금까지 Enter Play Mode를 통해 유니티 개발 환경을 최적화하는 방법을 알아보았다. 이 작은 설정 하나로도 몇 분, 아니 몇 시간씩 개발 시간을 단축할 수 있다. 이는 곧 더 많은 기능을 구현하거나 버그를 수정하는 데 투자할 수 있는 소중한 시간으로 이어진다.

이제 이 기능을 활용하여 불필요한 기다림 없이, 훨씬 더 즐겁고 효율적인 게임 개발을 경험해 보기를 바란다.

'Unity' 카테고리의 다른 글

Unity C# 스크립트에서 summary 주석 활용하여 코드 가독성 높이는 방법  (0) 2025.08.25
[Tip] Unity 에서 Scene View 카메라를 Game View에 적용시키는 방법  (2) 2025.07.24
[Tip] Unity 에서 그림자 깔끔하게 표현하는 방법  (0) 2025.07.21
'Unity' 카테고리의 다른 글
  • Unity C# 스크립트에서 summary 주석 활용하여 코드 가독성 높이는 방법
  • [Tip] Unity 에서 Scene View 카메라를 Game View에 적용시키는 방법
  • [Tip] Unity 에서 그림자 깔끔하게 표현하는 방법
deploylife
deploylife
빠르게 변화하는 기술 트렌드 속에서 새로운 기술을 학습하고 실제 개발에 적용하며 얻은 인사이트를 기록하고 있습니다.
  • deploylife
    인생은 배포중
    deploylife
  • 전체
    오늘
    어제
    • 분류 전체보기 (19)
      • Dev (2)
      • AI (3)
      • Unity (4)
      • Python (0)
      • Mac (4)
      • Life (3)
      • Blog (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    code block
    XPA
    Mouse Scroll
    Skin
    Reload Script Assemblies
    AuraSpiritDracula
    Highlight.js
    문서열람번호
    powernap
    Unity
    유니티
    EnterPlayModeOptions
    Palenight
    vscode
    컴파일속도
    MCP
    Mac
    생산성향상
    UnityTips
    Align with View
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
deploylife
[Tip] 유니티(Unity) 개발 속도 획기적으로 줄이는 방법 : Enter Play Mode
상단으로

티스토리툴바