참고: 이 섹션의 지침을 릴리스 순서대로 따르십시오. 예를 들어 프로젝트를 2019에서 2021로 업그레이드해야 하는 경우 2020 업그레이드 가이드를 읽고 변경해야 할 사항이 있는지 확인한 후 2021 업그레이드 가이드를 읽으십시오.
이 페이지에는 Unity 2018 버전에서 2019 LTS로 업그레이드할 경우 기존 프로젝트에 영향을 미칠 수 있는 Unity 2019 버전의 변경 사항이 나와 있습니다. Unity 2017 버전에서 업그레이드하는 경우 Unity 2018 LTS로 업그레이드를 참조하십시오.
2019 LTS는 2019.4로도 알려져 있습니다.
이 업그레이드 가이드에서는 Unity의 빌트인 렌더 파이프라인 2022.2 버전으로 업그레이드하는 방법에 대해 설명합니다. 다른 렌더 파이프라인을 2022.2 버전으로 업그레이드하려면 다음을 참조하십시오.
다른 패키지를 업그레이드하려면 사용하는 패키지의 문서를 참조하십시오.
Unity 2019.3 이상에서 경량 렌더 파이프라인(LWRP)이 유니버설 렌더 파이프라인(URP)으로 변경되었습니다.
프로젝트가 LWRP를 사용하는 경우 URP를 사용하도록 프로젝트를 업그레이드해야 합니다. 업그레이드 프로세스에 대한 단계별 가이드는 LWRP에서 URP로 업그레이드 가이드를 참조하십시오.
ShaderUtil.ClearShaderErrors()
는 이름 일관성을 위해 ShaderUtil.ClearShaderMessages()
로 변경되었으며, 이제 사용되지 않는 것으로 표시됩니다. Unity 2019.4에서 기존 프로젝트 스크립트를 열면 자동으로 업그레이드됩니다.
애니메이션 C# 잡은 UnityEngine.Experimental.Animations에서 UnityEngine.Animations로 이동하며 실험적인 네임스페이스에서 벗어나고 있습니다.
Unity 2019.4는 다음 애니메이터 잡 확장 메서드가 포함된 스크립트를 제외하고 대부분의 스크립트를 자동으로 업데이트합니다.
UnityEngine.Animations;
문을 사용하여 해당 스크립트에 수동으로 추가해야 합니다.
문서화되지 않은 RenderPipeline.beginCameraRendering
및 RenderPipeline.beginFrameRendering
이벤트가 제거되었습니다. 이러한 이벤트는 RenderPipelineManager
클래스의 이벤트로 대체해야 합니다.
RenderPipeline 정적 보호 함수 BeginFrameRendering
및 BeginCameraRendering
이 제거되었습니다. 이러한 함수는 파라미터에 ScriptableRenderContext
를 사용하는 서명으로 대체해야 합니다. 또한 호출해야 하는 EndCameraRendering
및 EndFrameRendering
메서드가 있습니다.
AsyncLoad
는 이제 사용되지 않습니다. 대신 Async.LoadAssetAsync를 사용하십시오.
새로운 에셋 임포트 파이프라인은 Unity 2019.3 이상에서 사용할 수 있습니다. 기존 프로젝트가 있는 경우 에디터에서 Project Settings 창 을 사용하여 새로운 에셋 임포트 파이프라인으로 업그레이드할 수 있습니다.
Version 2 를 선택하면 이 프로젝트와 함께 새로운 에셋 임포트 파이프라인을 사용하고 싶다고 에디터에 알립니다. 프로젝트를 다시 시작하면 새로운 에셋 임포트 파이프라인 코드를 사용하여 프로젝트를 다시 임포트합니다. 이는 본질적으로 Library 폴더를 삭제하지 않고도 삭제한 것과 동일한 효과를 낼 수 있습니다. 에셋 임포트 파이프라인 V2를 사용하도록 전환하면 V2가 임포트 결과를 저장하기 위해 자체 폴더 구조를 생성하므로 원래 에셋 임포트 파이프라인의 임포트 결과가 삭제되지 않습니다. Unity 2019.2 이하 버전에서 생성한 프로젝트는 기본적으로 원래의 에셋 임포트 파이프라인을 계속 사용합니다. Unity 2019.3에서 이러한 프로젝트를 처음으로 열면 새로운 에셋 임포트 파이프라인으로 업그레이드할 수 있는 옵션이 제공됩니다. 이 옵션을 거부하면 프로젝트는 원래 에셋 임포트 파이프라인을 계속 사용합니다. 또한 선택한 버전은 프로젝트의 EditorSettings.asset 파일에 저장되므로 버전을 관리할 수 있습니다.
Unity 2019.3 이상에서 새로운 프로젝트를 생성하면 새로운 에셋 임포트 파이프라인이 기본 작업 방식이 됩니다. 생성하는 모든 신규 프로젝트가 이 파이프라인을 사용합니다.
동일한 에셋의 여러 버전이 Library 폴더에 캐싱됩니다.
Unity 2019.2(원래 에셋 임포트 파이프라인 포함)까지 Library 폴더는 파일 이름인 에셋의 GUID로 이루어졌습니다. 따라서 한 플랫폼에서 다른 플랫폼으로 전환하면 Library 폴더의 임포트 결과가 무효화되어 플랫폼을 전환할 때마다 다시 임포트해야 했습니다.
매일 여러 번 플랫폼 간에 전환해야 한다면 프로젝트 규모에 따라 몇 시간이 소요될 수 있습니다. 여러분 중 일부는 컴퓨터에 플랫폼별 프로젝트 복사본을 보관하는 등과 같은 해결 방법을 알아냈지만, 확장성이 그다지 뛰어나진 않습니다. 저희는 새로운 에셋 임포트 파이프라인을 통해 GUID 대 파일 이름 매핑을 제거했습니다. 특정 에셋에 대한 종속성이 추적되기 때문에 이를 모두 함께 해시 처리하여 에셋의 임포트 결과에 대한 리비전을 생성할 수 있습니다. 따라서 에셋당 여러 리비전을 보유할 수 있으며, 이는 GUID 대 파일 이름 매핑에 의해 구속되지 않음을 의미합니다. 이러한 요구 사항이 없으면 다른 설정에서 작동하는 임포트 결과를 얻을 수 있습니다. 빠른 플랫폼 전환의 경우 플랫폼별 임포트 결과를 얻을 수 있으므로, 플랫폼 간에 전환 시 임포트 결과가 해당 플랫폼에 이미 존재합니다. 이로 인해 플랫폼이 에셋 임포트 파이프라인 V1보다 훨씬 더 빠르게 전환됩니다.
캐싱과 Unity 액셀러레이터
대부분의 임포터는 결정을 향상하고 캐싱에 긍정적인 영향을 미치기 위해 상당한 작업을 수행했습니다. 즉 Unity 액셀러레이터를 사용하면 임포트 결과가 중앙 스토리지에 업로드됩니다. 여기에서 다른 컴퓨터들은 다른 컴퓨터에서 동일한 에셋에 대해 수행된 작업에 연결하여 혜택을 누릴 수 있습니다. 이제 동적 종속성이 있는 에셋(예: 네스티드 프리팹, 셰이더 등)을 캐싱할 수 있습니다. 임포터와 해당 연결 파일에 대한 전체 리스트는 새로운 AssetDatabase 매뉴얼 페이지를 참조하십시오.
스크립트된 임포터의 캐싱:
스크립트된 임포터와 등록된 종속성이 있는 임포터는 예전 에셋 임포트 파이프라인에서 캐싱되지 않았습니다.
예전 동작
기존 에셋 임포트 파이프라인에서는 임포트 결과가 GUID 기반이었기 때문에 플랫폼을 전환하면 모든 임포트가 무효화되므로 플랫폼을 전환할 때마다 임포트 결과를 덮어쓰게 되었습니다.
새로운 동작
새로운 에셋 임포트 파이프라인에서는 임포트 결과를 나타내는 디스크의 파일이 자체 콘텐츠의 해시이기 때문에 플랫폼을 전환해도 임포트가 무효화되지 않으므로 플랫폼을 전환할 때 콘텐츠가 달라져서 새 파일이 생성됩니다. 따라서 임포트 결과의 두 버전을 모두 유지하면서 아무것도 임포트하지 않고 둘 중 하나로 간단히 전환할 수 있습니다.
예전 에셋 임포트 파이프라인에서는 OnPostProcessAllAssets
함수의 호출 횟수가 결정론적이지 않았습니다. 이는 이 함수가 동일한 변경에 대해 한 번 또는 여러 번 호출될 수 있음을 의미합니다. 새로운 에셋 임포트 파이프라인에서는 감지된 스크립트 변경 사항(.cs 파일)에 대해 OnPostProcessAllAssets
호출이 한 번, 그리고 비스크립트 변경 사항(.png, .fbx, .wav 파일)에 대해 한 번 이루어집니다.
예전 에셋 임포트 파이프라인에서는 컴파일이 진행되는 동안 컴파일 및 체인이 플레이 모드로 전환될 수 있었습니다. 이는 특정 상황에서 시간을 크게 절약할 수 있었고, 비동기식 컴파일을 사용하면 비결정론적 결과가 발생할 수 있었습니다. 새로운 에셋 임포트 파이프라인에서는 에셋 임포트 파이프라인이 대부분의 스크립트 컴파일을 구동하도록 변경되어 결정론적 접근 방식이 필요하며, 이로 인해 스크립트 컴파일이 완료될 때까지 에디터가 잠깁니다.
이제 타일맵 에디터가 패키지로 변경되었습니다. 이 패키지는 2D 프로젝트 템플릿으로 생성된 새로운 Unity 프로젝트에 자동으로 설치됩니다. 패키지 설치에 대한 자세한 내용은 패키지 추가 및 제거를 참조하십시오.
모든 공용 클래스가 UnityEditor.Tilemaps 네임스페이스로 이동되었습니다. Unity는 이러한 클래스를 참조하는 스크립트를 “Unity.2D.Tilemap.Editor” 어셈블리 정의 에셋으로 컴파일합니다. 여기에는 다음이 포함됩니다.
Unity는 스크립트에서 관련 타일맵 using
문을 업데이트하려고 시도하지만, 필요한 경우 확인 후 변경하십시오.
어셈블리 정의의 일부인 스크립트를 사용하여 Tilemap Tooling 클래스를 참조하는 경우 어셈블리 정의 아래에 “Unity.2D.Tilemap.Editor” 어셈블리 정의를 어셈블리 정의 레퍼런스로 추가해야 합니다. Unity에서 자동으로 이를 설정했을 수 있지만, 그렇지 않은 경우에는 변경하십시오.
이전 Unity 버전의 Tilemap Tooling 클래스를 참조하는 어셈블리를 사전 컴파일한 경우 이러한 변경으로 인해 어셈블리를 사용할 때 문제가 발생합니다. 가능하면 새로운 Tilemap Tooling 어셈블리에 대해 이러한 어셈블리를 업데이트하고 다시 컴파일하십시오.
이전 Unity 버전의 Tilemap Tooling 클래스를 참조하는 어셈블리를 사전 컴파일한 경우 새로운 Tilemap Tooling 어셈블리를 참조하도록 이러한 어셈블리를 업데이트하고 다시 컴파일해야 합니다.
다음은 사전 컴파일된 어셈블리를 임포트할 때 발생하는 문제의 예입니다(콘솔 창의 오류).
Failed to extract {Class in Precompiled Assembly} class of base type UnityEditor.GridBrush when inspecting {Precompiled Assembly} Unloading broken assembly {Precompiled Assembly}, this assembly can cause crashes in the runtime
이러한 오류는 GridBrush를 비롯한 Tilemap Tooling 클래스 중 하나에서 상속할 때 발생할 수 있습니다.
다음은 사전 컴파일된 어셈블리를 사용할 때 발생하는 문제의 예입니다(콘솔 창의 오류).
TypeLoadException: Could not resolve type with token 01000011 (from typeref, class/assembly UnityEditor.GridBrush, UnityEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null)
Error: Could not load signature of {Method in Precompiled Assembly) due to: Could not resolve type with token 01000011 (from typeref, class/assembly UnityEditor.GridBrush, UnityEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null) assembly:UnityEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null type:UnityEditor.GridBrush member:(null) signature:<none>
이러한 오류는 GridBrush를 비롯한 Tilemap Tooling 클래스의 메서드 중 하나를 생성하거나 호출할 때 발생할 수 있습니다.
Sprite Tooling(스프라이트 에디터 창)은 이제 패키지입니다.패키지 설치에 대한 자세한 내용은 패키지 추가 및 제거를 참조하십시오.
이제 Unity UI(UGUI)가 패키지로 변경되었으며, 패키지 관리자(메뉴: Window > Package Manager)에서 액세스할 수 있습니다.
Unity UI는 Unity와 함께 제공되는 핵심 패키지입니다. 새로운 프로젝트에 설치할 필요는 없습니다. 2019.2b1 이하 버전에서 생성된 기존 Unity 프로젝트를 Unity 2019.2로 업그레이드하면 이 패키지가 자동으로 추가됩니다. 어셈블리 정의는 uGUI 어셈블리에 대한 레퍼런스를 자동으로 가져옵니다. 이전 버전의 Unity 위에 Unity 2019.2를 설치하는 경우 \Editor\Data\UnityExtensions\Unity에 있는 GUISystem 폴더가 제거되었는지 확인하십시오. 그렇지 않으면 클래스 재정의 오류가 발생할 수 있습니다. Unity UI 소스 코드는 패키지와 함께 제공되기 때문에 BitBucket에 더 이상 퍼블리시되지 않습니다. 이제 Unity UI API 문서는 메인 스크립팅 API 레퍼런스에 없습니다. 대신 Unity UI 패키지 문서의 스크립팅 API 섹션에서 액세스할 수 있습니다.
자세한 내용은 UI Elements 2019.1 업그레이드 가이드를 참조하십시오.
스크립팅 런타임 버전에 대한 .NET 3.5 Equivalent 옵션이 제거되었습니다. 프로젝트를 2019.2에서 열면 .NET 4.x Equivalent 옵션을 사용하도록 자동으로 마이그레이션됩니다.
2019.1 이전에는 프로그레시브 라이트매퍼 사용 시 Indirect Intensity 슬라이더는 라이트맵에만 영향을 주었습니다. 인라이튼의 경우에는 라이트 프로브와 라이트맵 모두에 적용되었습니다. 이제는 모든 백엔드가 Indirect Intensity 값을 라이트맵과 라이트 프로브 둘 다에 적용합니다. 조명을 다시 베이크할 경우 Indirect Intensity 값이 변경되었다면 프로브가 더 밝게 표시됩니다. 업그레이드 후에는 라이트맵을 다시 베이크하기 전에 베이크된 데이터를 지우는 것이 좋습니다.
단일 문자열을 취하는 생성자는 이제 사용할 수 없습니다. 지원되는 오버로드에 대한 자세한 내용은 이 문서를 참조하십시오.
Unity 2019 LTS에서 생성된 프로젝트에는 macOS 10.12 또는 Ubuntu 16.04 이상 버전이 필요합니다.
멀티플레이어 고수준 API가 확장 기능에서 패키지로 이동했습니다. 이는 NetworkTransport 클래스(저수준 API)에는 영향을 주지 않습니다. Unity 엔진에 있는 모든 종속성이 패키지로 이동했습니다. 즉 현재 마이그레이션할 수 없는 프로파일러에 대한 일부 연결을 제외하고 고수준 API는 독립적으로 동작합니다.
고수준 API가 포함된 예전 프로젝트는 컴파일러 오류를 막기 위해 이 패키지를 자동으로 추가합니다. 이 동작은 신규 프로젝트에서는 발생하지 않으며, 필요한 경우 Package Manager 창에서 추가할 수 있습니다. 멀티플레이어 고수준 API 문서를 참조하십시오.
2019.4부터 Unity는 UNITY_ADS
를 자동으로 정의하지 않습니다. 따라서 스크립트에서 UNITY_ADS
사용을 중지하거나, 새로운 커스텀 전역 #define을 생성해야 합니다. 새로운 커스텀 전역 #define을 생성하는 방법에 대한 지침은 플랫폼 의존 컴파일 페이지를 참조하십시오.