# 씬 리로드

> Understand how disabling scene reload on enter Play mode affects your application and how you can compensate for these effects in your code.

씬 리로드는 기본적으로 활성화되어 있습니다. 따라서 플레이 모드를 시작하면 Unity는 기존의 모든 씬 게임 오브젝트를 삭제하고 디스크에서 씬을 다시 로드합니다. Unity가 이 작업을 완료하는 데 걸리는 시간은 씬의 복잡도에 비례합니다. 프로젝트가 복잡해지면 플레이 버튼을 누른 후 에디터에서 씬에 완전히 로드될 때까지 걸리는 시간이 길어집니다.

씬 리로드를 비활성화하면 프로세스 시간이 단축됩니다. 이를 통해 프로젝트 개발을 더 빠르게 반복할 수 있습니다. Unity는 디스크에서 씬을 다시 로드하는 대신 씬의 수정된 콘텐츠만 재설정합니다. 이렇게 하면 씬의 언로드 및 리로드로 인한 시간 및 성능 영향을 피할 수 있습니다. Unity는 새로 로드된 것처럼 동일한 초기화 함수(예: `OnEnable`, `OnDisable`, `OnDestroy`)를 호출합니다.

## 씬 리로드 비활성화

씬 리로드를 비활성화하면 에디터에서 애플리케이션을 시작하는 데 걸리는 시간이 빌드된 버전의 시작 시간과 더 이상 일치하지 않게 됩니다. 따라서 프로젝트를 시작하는 동안 정확히 어떤 일이 발생하는지 디버깅하거나 프로파일링하려면 씬 리로드를 활성화하여 애플리케이션의 빌드된 버전에서 발생하는 실제 로드 시간과 프로세스를 더 정확하게 나타내야 합니다.

자세한 내용은 [플레이 모드 설정 방법](/engine/6000.0/manual/scripting/compilation-and-code-reload/code-reloading-editor/configurable-enter-play-mode.md)을 참조하십시오.

씬 리로드를 비활성화하려면 다음 단계를 따르십시오.

1. **Edit > Project Settings**로 이동하여 [Project Settings 창](/engine/6000.0/manual/unity-editor/editor-features/comp-manager-group.md)을 엽니다.

2. [Editor](/engine/6000.0/manual/unity-editor/editor-features/comp-manager-group/class-editor-manager.md) 탭을 클릭합니다.

3. **Enter Play Mode Settings** 섹션의 **When entering play mode** 드롭다운 메뉴에서 다음 중 하나를 선택합니다.

   * 씬 리로드를 비활성화하고 도메인 리로드를 활성화하려면 **Reload Domain only**를 선택합니다.
   * 도메인 리로드와 씬 리로드를 모두 비활성화하려면 **Do not reload Domain or Scene**을 선택합니다.

## 씬 리로드를 건너뛸 경우 미치는 영향

씬 리로드를 비활성화하면 프로젝트에 대한 부작용이 최소화됩니다. 하지만 씬 리로드는 도메인 리로드와 긴밀하게 연결되어 있으므로 다음과 같은 몇 가지 중요한 차이가 나타납니다.

1. 직렬화되지 않은 ScriptableObject 및 MonoBehaviour 필드는 편집 모드로 돌아갈 때 재생 모드 중에 할당된 값을 유지합니다. 이는 Unity가 기존 오브젝트나 호출 생성자를 재생성하지 않기 때문입니다. 다양한 컨텍스트에서 직렬화되어 있거나 직렬화되어 있지 않은 요소를 이해하려면 [Unity가 직렬화를 사용하는 방법](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-serialization/how-unity-uses.md)을 참조하십시오. 비공개 필드는 일반 빌드 파이프라인의 일환으로 직렬화되지 않고 에디터의 [스크립트 핫 리로드](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-serialization/how-unity-uses.md#hot-reload)의 일환으로 **직렬화된다는** 점에 **유의하십시오**. 따라서 플레이 모드에서 수정하는 프라이빗 필드는 씬과 도메인 리로드가 플레이 모드 시작 시 비활성화된 경우에도 플레이 모드를 종료할 때 원래 값으로 초기화될 수 있습니다.

2. Unity는 도메인 리로드 중에 배열/목록 유형의 null 비공개 필드와 내부 필드를 빈 배열/목록 오브젝트로 전환하며, 런타임(비에디터) 스크립트에서는 null이 아닙니다.

3. `ExecuteInEditMode`를 사용하는 스크립트나 `ExecuteAlways` 스크립트는 `OnDestroy` 또는 `Awake` 호출을 수신하지 않습니다. Unity는 Awake를 호출하지 않으며, `EditorApplication.isPlaying` 프로퍼티를 확인하는 Awake/OnEnable 메서드를 사용하여 플레이 모드 변경 시 `EditorApplication.isPlaying`이 이미 true인 경우에만 OnEnable을 호출합니다. 런타임(비에디터) 스크립트에 직렬화되지 않은 필드는 편집 모드에서 활성화되지 않기 때문에 문제가 되지 않지만, `ExecuteInEditMode` 또는 `ExecuteAlways`로 표시된 스크립트는 스스로 변경하거나 다른 런타임 스크립트의 필드에 접근할 수 있습니다. 이 문제를 해결하려면 OnEnable 콜백에서 영향을 받는 필드를 직접 초기화하십시오.

## 추가 리소스

* [Project Settings 창](/engine/6000.0/manual/unity-editor/editor-features/comp-manager-group.md)
* [에디터 프로젝트 설정](/engine/6000.0/manual/unity-editor/editor-features/comp-manager-group/class-editor-manager.md)
* [툴바](/engine/6000.0/manual/unity-editor/using-the-editor/toolbar.md)
* [도메인 리로드](/engine/6000.0/manual/scripting/compilation-and-code-reload/code-reloading-editor/configurable-enter-play-mode/domain-reloading.md)
* [설정 가능한 플레이 모드 시작](/engine/6000.0/manual/scripting/compilation-and-code-reload/code-reloading-editor/configurable-enter-play-mode.md)
