Unity 2019.1로 업그레이드
Unity 2018.2로 업그레이드

Unity 2018.3으로 업그레이드

이 페이지에는 이전 Unity 버전에서 2018.3로 업그레이드할 경우 기존 프로젝트에 영향을 미칠 수 있는 변경 사항이 나열됩니다.


향상된 프리팹

  • 프리팹은 새로운 프리팹 시스템으로 자동 업그레이드됩니다.
  • 프리팹 네스팅을 지원하기 위해 프리팹 워크플로가 변경되었습니다. 프리팹을 편집하려면 프리팹 모드에서 프리팹을 열어야 합니다. 프로젝트 브라우저에서는 더 이상 프리팹을 편집할 수 없습니다.
  • 프리팹 모드에서 게임 오브젝트 삭제, 게임 오브젝트의 부모 재지정, 트랜스폼을 RectTransform으로 변경 등과 같은 구조적 변경 작업을 수행할 수 있습니다. 또는 프리팹 에셋에 대한 링크를 완전히 제거하여 필요에 따라 결과물로 얻은 플레인 게임 오브젝트의 구조를 변경하고 싶은 경우에는 프리팹 인스턴스를 언팩할 수도 있습니다.
  • 게임 오브젝트를 생성하는 에디터 툴링은 ObjectFactory.CreateGameObject을 사용하여, 프리팹 에셋이 현재 프리팹 모드에서 편집되고 있는 경우 게임 오브젝트가 프리팹 씬에 나타나도록 해야 합니다.
  • 안전 예방을 위해 [ExecuteInEditMode] 속성이 포함된 스크립트는 열린 프리팹에 해당 속성이 있는 경우 에디터에서 플레이 모드로 진입할 때 프리팹 모드를 종료시킵니다. 이러한 스크립트가 프리팹 모드와 호환되도록 만드는 방법은 스크립팅 레퍼런스 페이지에서 ExecuteInEditMode 속성과 새로 추가된 ExecuteAlways 속성을 참조하십시오.
  • 프리팹은 임포트된 에셋이므로 스크립트에서 프리팹 에셋을 임의로 수정할 수 없습니다. 대신 PrefabUtility.LoadPrefabContents, PrefabUtility.SaveAsPrefabAsset, PrefabUtility.UnloadPrefabContents를 사용해야 합니다.
  • AssetDatabase.AddObjectToAsset을 사용하여 에셋을 프리팹에 추가하는 경우 이제는 필수 오브젝트를 추가한 후 PrefabUtility.SavePrefabAsset을 호출해야 합니다.

이제 USS 플렉스 속기 확장이 CSS 표준을 준수함

  • 이제 USS 플렉스 지시문은 flex-grow, flex-shrinkflex-basis를 나타내는 최대 3개의 파라미터를 허용합니다. flex-shrink 및 flex-basis 파라미터는 선택 사항입니다. 생략할 경우 flex-basis는 0, flex-shrink는 1로 기본값이 각각 지정됩니다.
  • 2018.3 이전에는 flex: Nflex N 0 auto와 동등했습니다. 이제는 flex: N 1 0과 동등하도록 만들어 CSS 표준을 따릅니다. 예전 시맨틱을 보전하려면 USS 파일의 모든 flex: N 지시문을 flex: N 0 auto로 교체해야 합니다.

관리되는 사용자 스레드에서 처리되지 않은 예외 로깅 지원

  • 2018.3 이전에는 Unity 에디터가 관리되는 사용자 스레드에서 발생한 처리되지 않은 예외를 기록하지 않았습니다. 2018.3 이후에는 관리되는 사용자 스레드에서 발생하는 처리되지 않은 예외가 Unity 에디터 콘솔에 기록됩니다.
  • 이제는 모든 관리되는 사용자 스레드가 로깅에 포함되기 때문에 프로젝트에서 발생했지만 지금까지 콘솔에 전달되지 않았던 예외를 언제든지 확인할 수 있습니다.

이제 VFACE 셰이더 변수가 DirectX(11&12)에서 반전됨

큐브맵으로 렌더링할 때 VFACE 셰이더 변수는 DirectX와 다른 그래픽스 API간에 일관되지 않았습니다. 이제는 동일한 동작을 수행합니다. DirectX에서 VFACE bool 셰이더 변수를 사용하여 큐브맵을 렌더링하는 경우 코드의 로직을 뒤집어야 합니다. * 문제 ID 1027670을 참조하십시오.


PhysX가 3.3.1에서 3.4.2로 업그레이드됨

물리 행동이 변경되었으며, 일부 프로젝트가 신규 버전과 다르게 동작할 수 있습니다. 다음이 대표적인 예입니다.

  • 이제 컨택트 패치는 Persistent Contact Manifold 모드에서 최대 6개의 컨택트를 포함합니다. 이는 이전 버전의 패치당 5개 컨택트에서 증가한 수치입니다. 매니폴드의 패치를 병합하는 신규 코드와 컨택트를 선택하는 신규 코드가 추가되었습니다. 충돌은 이전보다 훨씬 더 정확하게 보입니다. 신규 코드와 호환 가능하도록 만들기 위해 컨택트의 특정 배열을 사용하는 프로젝트에 대해 작업을 수행해야 할 수 있습니다. 볼록한 바디가 메시와 프리미티브와 충돌할 때 이러한 점을 쉽게 확인할 수 있습니다.
  • 새로운 알고리즘을 사용하여 contacts with terrains 를 계산합니다. 예전에는 특수한 경우였지만, 이제는 MeshCollider에서 사용되는 것과 동일한 메시-프리미티브 코드입니다. 이 코드는 신뢰할 수 있고 정확하며 성능이 우수합니다. 하지만 TerrainData.thickness를 지원하지 않습니다. 즉 지형의 터널링 효과가 이제 가능합니다. 이를 방지하려면 빠르게 이동하는 오브젝트에 대해 연속 충돌 검사를 활성화해야 합니다. 이전에는 바디가 지형 아래의 TerrainData.thickness보다 깊지 않은 것으로 감지되면 자동으로 돌출되었지만, 노멀이 정확하지 않았습니다. 예전 동작을 사용하려면 물리 설정에서 Enable Unified Heightmaps 옵션을 선택 해제하십시오.
  • Negative mesh scaling은 모든 경우에 메시 베이킹으로 직접 연결되지 않습니다. 오목한 메시는 더 이상 베이크되지 않습니다. 하지만 볼록한 메시는 여전히 스케일링을 베이크해야 합니다. 이러한 변화로 인해 네거티브 스케일링은 scale.x * scale.y * scale.z < 0일때 메시 노멀을 반전합니다. 또한 skew와 shear 같은 의미 있는 스케일링은 예전처럼 계속 베이크해야 합니다.
  • Convex mesh inflation 은 입력 메시의 모든 결함에 대해 더욱 관대한 새로운 볼록 헐 계산 알고리즘(Quickhull)에 필요하지 않기 때문에 지원이 중단되었습니다.

AssetBundle.mainAsset 프로퍼티가 더 이상 사용되지 않는 것으로 표시됨

  • Unity 5.0 버전 이하에서 사용자들은 AssetBundleBuildAssetBundle API를 사용하여 에셋 번들을 빌드해야 했습니다. 이 API는 에셋 번들의 mainAsset 프로퍼티를 사용하여 로드할 때 반환되는 오브젝트를 제공하도록 요구했습니다.
  • Unity 5.0에서 AssetBundle.BuildAssetBundle API가 더 이상 사용되지 않는 것으로 표시되고 AssetBundle.BuildAssetBundles로 교체되었습니다. 이로 인해 에셋 번들에서 에셋을 가져오는 방식이 바뀌었습니다.
  • 이제는 에셋 번들에서 콘텐츠를 가져오려면 에셋의 이름이나 AssetBundle.LoadAsset API가 포함된 경로를 가져와야 합니다. 자세한 내용은 에셋 번들 빌드, 에셋 번들의 전문적인 활용, 에셋 번들 스크립팅 API에 관한 문서를 참조하십시오.

NavMesh 컴포넌트를 사용하는 프로젝트 업그레이드

  • 2018.2 이하 버전에서 2018.3b 버전으로 프로젝트를 이동하고 Unity의 GitHub 저장소에서 가져온 NavMesh 컴포넌트를 사용하는 경우 이제는 이 브랜치를 사용해야 합니다.

파티클 시스템 버그 수정

Unity 2018.3에는 일부 파티클 버그 수정이 포함되어 있으며, 이는 이전 버전에서 생성된 프로젝트에 영향을 줄 수 있습니다.

  • 빌보드 파티클에 비균일 트랜스폼 스케일을 사용할 때 Y축과 Z축이 반전되는 문제가 수정되었습니다.
  • 메시 파티클에 비균일 트랜스폼 스케일을 사용할 때 스케일링 후에 회전이 적용되었습니다. 이는 2017.x 버전의 문제로, 5.6 버전 이전에서는 정확히 동작했지만 2017 사이클에서 손상되었습니다. 이 버그를 수정하면 5.6 이전 버전에서 생성된 콘텐츠의 문제는 해결되지만 2017.x 버전에서 생성된 콘텐츠가 변경됩니다.
  • 구형 윈드 존이 나무와 달리 파티클에 반대 효과를 주었습니다. 이 문제는 구형 윈드 존이 파티클을 끌어당기는 것이 아니라 밀어내도록 변경하여 해결되었습니다. 외부 힘 멀티플라이어 또는 윈드 존 강도를 무효화하여 이전 동작을 복원할 수 있습니다. 나무 또는 방향 윈드 존이 포함된 씬에 잘못된 영향을 줄 수 있기 때문에 Unity는 이 옵션을 자동으로 변경하지 않습니다.

C# 컴파일러가 Roslyn으로 업그레이드

2018.3 이전에 Unity 에디터는 모노 C# 컴파일러(mcs)를 사용하여 프로젝트의 C# 파일을 컴파일했습니다. 2018.3 이상에서는 Roslyn C# 컴파일러(csc)가 새로운 스크립팅 런타임(.NET 4.x Equivalent)을 타겟팅하는 프로젝트에 사용됩니다. Roslyn으로 전환하면 다음과 같은 여러 동작을 목격할 수 있습니다.

  • C# 7.3이 지원됨
  • 추가 경고가 보고될 수 있음
  • Roslyn 컴파일러용 리스폰스 파일의 이름은 csc.rsp여야 합니다. PlatformDependentCompilation을 참조하십시오.

UnityScript 및 Boo 스크립트 컴파일러가 제거됨

UnityScript(.js) 및 Boo(.boo) 스크립트 파일은 이제 에디터에서 컴파일할 수 없습니다.

자세한 내용은 2017년 8월 블로그 포스트에서 확인할 수 있으며 unityscript2csharp 툴을 사용하여 UnityScript를 C#으로 전환할 수 있습니다.


애니메이터 루트 모션 재생이 변경됨

애니메이션 창에서 루트 모션 애니메이션을 작성할 때 발생하는 일부 불일치 문제를 수정하기 위해 애니메이터 루트 모션 재생이 약간 변경되었습니다.

  • 애니메이션 클립 때문에 루트 모션 커브를 생성할 필요가 없습니다. 이제 루트 모션 애니메이션은 Animator.applyRootMotion만을 기반으로 합니다.

2018.2 - 2018.3 동질성

사례 생성되는 루트 모션 Animator.applyRootMotion 2018.2 2018.3
A 루트 모션을 루트 트랜스폼에 점증적으로 적용합니다. 2018.2와 동일함
B 아니요 아니요 애니메이션 클립에서 작성된 대로 포지션, 회전 및 스케일 커브를 적용합니다. 2018.2와 동일함
C* 아니요 루트 트랜스폼 움직임 없음 애니메이션 클립에서 작성된 대로 포지션, 회전 및 스케일을 적용합니다.
D* 아니요 루트 트랜스폼 움직임 없음 루트 모션을 루트에 점증적으로 적용합니다.

For cases C and D, to achieve the same result in 2018.3, you need to implement OnAnimatorMove, then discard Animator.deltaPosition and Animator.deltaRotation in cases where you don’t want to apply Root Motion.

프로젝트가 applyRootMotion을 사용하여 루트 트랜스폼의 포지션, 회전 및 스케일 애니메이션을 “뮤트”한 후 Root Transform 프로퍼티를 수동으로 오버라이드해야 합니다.

Unity 2019.1로 업그레이드
Unity 2018.2로 업그레이드