5.4 네트워킹 API 변경 사항(5.4 Networking API Changes)
Unity 5.2으로 업그레이드

Unity 5.3으로 업그레이드

전역 조명

라이트맵 스냅샷이 조명 데이터 에셋으로 이름이 변경되었습니다. Enlighten 3으로 업그레이드한 후 조명 데이터의 내부 포맷이 변경되었습니다. 이전 Unity 버전의 스냅샷은 더 이상 지원되지 않으므로 다시 베이크해야 합니다.

실시간 GI가 있는 스트리밍된 씬 에셋 번들에도 영향을 미칩니다. 라이트맵이 로드되지 않으므로 해당 번들도 다시 빌드해야 합니다.

라이트 프로브와 환경 조명이 이제 감마 및 선형 색 공간에서 일정합니다. Unity 5.2에 비해 환경 조명이 다소 차이가 날 수 있습니다. 결과물은 이제 Unity 4.x와 밝기가 일치하지만, 4.x와 광원 투사 모드에서는 L2 계수를 생성하고 Enlighten에서는 L1만 출력하므로 최종 라이트 프로브에서 나타나는 결과는 다르게 보일 수 있습니다. 라이트 프로브에 대한 L2 지원은 향후 릴리스에 예정되어 있습니다. 중요하지 않은 방향 광원은 이제 4.x와 일치할 것입니다. 라이트 프로브는 선형 색 공간에서 셰이더로 항상 전달되고 최종 감마 변환이 GPU에서 수행됩니다. Unity 에디터의 ShadeSHxxx 함수를 셰이더의 스피리컬 하모닉을 평가하는 데 사용하는 경우 셰이더를 변경할 필요가 없을 것입니다. UNITY_STANDARD_SIMPLE 셰이더에서 SH 평가는 픽셀과 버텍스 셰이더 간에 분할되지 않으므로 선형 -> 감마 변환은 버텍스 셰이더에서 한 번만 이루어지도록 제한됩니다. 고급 GPU에서는 버텍스 셰이더와 프래그먼트 셰이더를 나눠서 연산합니다.

슈리켄

Collision 모듈의 파티클 크기가 새 파라미터인 Radius Scale로 대체되었습니다. 새 파라미터는 실제 파티클 크기의 멀티플라이어로 작용합니다. 파티클 크기 근사 이외의 다른 작업에 이전 값을 사용한 경우 새 파라미터를 사용하여 충돌 경계를 다시 설정해야 합니다.

다중 씬 편집

다중 씬 편집 기능에 EditorSceneManager와 SceneManager를 통해 새 API가 도입됩니다. 이로 인해 EditorApplication 및 Application의 여러 API가 지원 중단되었습니다.

  • EditorApplication.NewScene
  • EditorApplication.NewEmptyScene
  • EditorApplication.OpenScene
  • EditorApplication.OpenSceneAdditive
  • EditorApplication.SaveScene
  • EditorApplication.SaveCurrentSceneIfUserWantsTo
  • EditorApplication.SaveCurrentSceneIfUserWantsToForce

위 모두는 EditorSceneManager에도 동등한 API가 있습니다.

  • EditorApplication.currentScene

내부적으로 씬 관리자의 활성 씬 이름을 반환하지만, 현재 열려 있는 씬을 모두 가져오려면 EditorSceneManager API를 사용해야 합니다.

  • EditorApplication.MarkSceneDirty
  • EditorApplication.isSceneDirty

이제 씬에 자체적인 더티 플래그가 있습니다. EditorSceneManager를 통해 씬을 가져오고 상태를 확인합니다. 씬을 더티로 설정하는 작업도 EditorSceneManager을 통해 수행됩니다. 지원 중단된 API는 모두 활성 씬에서만 작동합니다.

  • Application.LoadLevel
  • Application.LoadLevelAsync
  • Application.LoadLevelAdditive
  • Application.LoadLevelAdditiveAsync

Application.LoadLevel\[Async\]\(path\)은 SceneManager.LoadScene\[Async\](path, false)로 리디렉션되고 Application.LoadLevelAdditive\[Async\]\(path\)는 SceneManager.LoadScene\[Async\](path, true)로 리디렉션됩니다.

  • Application.loadedLevel
  • Application.loadedLevelName

각각 활성 씬의 빌드 설정 인덱스와 활성 씬의 이름을 가져옵니다. SceneManager를 사용하여 모든 로드된 씬의 인덱스와 이름을 가져와야 합니다.

또한 에디터에서 재생하는 중에 EditorApplication.OpenSceneAdditive를 더 이상 호출할 수도 없습니다. 따라서 [PostprocessScene] 콜백에서 호출할 수도 없습니다. 그래도 재생 중에 EditorApplication.OpenSceneAdditive가 호출되면 재생 모드가 중지됩니다.

미리 컴파일된 셰이더 에셋

미리 컴파일된 셰이더 에셋은 더 이상 지원되지 않습니다. 즉, 더 이상 “show compiled code”를 클릭하여 그 결과 생성되는 디스어셈블리를 새 셰이더 에셋으로 복사할 수 없습니다. 미리 컴파일된 이전 셰이더 에셋은 지원되지 않는 것으로 표시됩니다.

셰이더 인스펙터의 “show compiled code”는 계속 작동하고 셰이더의 디스어셈블리를 각 플랫폼에 표시합니다.

마찬가지로, 표면 셰이더에 대해 생성된 코드를 계속 보고 수정하고 새 셰이더 에셋으로 복사할 수 있습니다. 수정하는 유일한 HLSL 소스이기 때문입니다.

이는 이전 Unity 버전에 내장된 에셋 번들에 영향을 미칩니다. 정의에 따라, 이런 에셋 번들 안에는 컴파일된 셰이더 에셋이 있습니다. 이런 번들에 있는 셰이더는 모두 다시 빌드해야 합니다.

자세한 내용은 예정된 지원 중단 기능과 관련한 Unity 블로그 포스트에서 확인할 수 있습니다.

데스크톱에서 OpenGL 4.x지원

이제 OS X 에디터 및 스탠드언론에서 새 GL 백엔드를 지원하는 새로운 기능이 추가되었습니다. 이 백엔드를 통해 테셀레이션 및 지오메트리 셰이더와 같은 OpenGL 3.x 및 4.x 기능을 사용할 수 있습니다. 하지만 Apple은 OS X 데스크톱에서 OpenGL 버전을 4.1로 제한하기 때문에 모든 DirectX 11 기능(정렬되지 않은 액세스 뷰 또는 컴퓨트 셰이더 등)을 지원하지 않습니다. 다시 말해 Shader Level 5.0(#pragma target 50)을 타겟팅하도록 설정된 모든 셰이더는 OS X에서 로드되지 않습니다.

그래서 #pragma target gl4.1이라는 새로운 셰이더 타겟 레벨이 도입됐습니다. 이 타겟 레벨의 최소 요구사양은 데스크톱에서 OpenGL 4.1이나 DirectX 11.0 Shader Level 5, 또는 모바일에서 OpenGL ES 3.1 + Android Extension Pack입니다.

에셋 번들

새로운 LZ4 압축을 지원하고 추가 개선을 위한 기초를 다지기 위해 에셋 번들의 컨테이너 포맷이 변경되었습니다. 이전 버전(2.x, 3.x)에서 생성된 번들은 사용이 중단되고, 지원되지 않습니다. Unity 4.x, 5.0–5.2에서 생성된 번들은 지원되고, 로드할 수 있습니다. 하지만 번들이 WWW.LoadFromCacheOrDownload 메서드를 사용하여 이미 사용자 기기에 캐시된 경우 다시 다운로드됩니다. 이런 번들의 데이터도 변경될 수 있습니다(전역 조명 섹션 등 참조).

GetComponent(s)InChildren

GetComponentsInChildren을 비활성화된 부모가 있는 게임 오브젝트에서 호출하는 경우 동작이 약간 변경되었습니다.이전에는 이 동작의 결과로 항상 빈 배열이 얻어졌지만, 이것을 원하는 경우는 없고 이로 인해 GetComponentsOnChildren가 프리팹에서 작동하지 않았기 때문에 타겟 게임 오브젝트 부모의 활성 상태를 무시하도록 동작이 변경되었습니다. 단수 버전인 GetComponentInChildren()에는 이제 선택적인 includeInactive 인수가 있습니다.

UI/기본 셰이더

새로운 기본 UI 셰이더를 새롭지 않은 UI 오브젝트에 사용하는 기능이 더 이상 기본적으로 지원되지 않습니다. 과거에는 _clipRect 사용 여부를 결정하는 ‘if’ 확인이 있었지만 성능상의 이유로 제거되었습니다. 새 UI 셰이더를 새롭지 않은 UI 오브젝트에 계속 사용하려면 유효한 clipRect를 직접 지정해야 합니다.

그림자를 드리우는 점 광원과 스폿 광원

그림자를 드리우기 위해 선택하는 점 광원에서는 이제 편차 슬라이더를 통해 그림자 결함을 조정하거나 균형을 맞출 수 있습니다. 이전에는 점 광원에 편차를 설정하더라도 아무런 기능도 수행하지 않았지만 이제는 이런 점 광원이 영향을 미치기 시작하고, 이로 인해 그림자를 만드는 동작이 변경됩니다.

그림자를 드리우는 스폿 광원에는 이제 전방 절단면 거리를 선택할 수 있는 새로운 슬라이더가 추가되었습니다. 전방 절단면 거리 안에 있는 오브젝트는 그림자를 드리우지 않습니다. 값을 낮게 설정하면 가까운 오브젝트가 포함되지만, 그림자의 정밀도가 크게 저하되는 단점이 있습니다. 이전 Unity 버전에서 이 거리는 총 광원 범위의 4%로 계산되었는데, 큰 광원에서 이 값은 너무 높은 값이었습니다. 이제 기본값은 0.2이고, 대부분의 경우에 적합합니다.

쿼터니언 수학

임포터 오일러 회전 커브를 새로 지원하고 여러 오일러 회전 순서를 모두 지원함에 따라 QuaternionToEuler 및 EulerToQuaternion 수학 함수를 기존 및 SIMD 버전에서 모두 다시 작성해야 합니다. 이 새로운 배리에이션은 아직 API에서 사용할 수 없고, 지금은 내부적으로만 사용됩니다.

이로 인한 영향은 매우 적지만, 짐벌 락 상태에 매우 가까울 때만 이전 버전과 새 버전의 결과에 약간(0.01도 미만) 차이가 있습니다. 테스트 실행에서는 새 버전이 대부분의 경우에 더 정확하고 평균 오차가 최소 10분의 1 이상 더 작은 것으로 나타났습니다.

JointDriveMode 플래그

JointDriveMode 플래그는 이제 오래되어 사용되지 않으므로 제거되었습니다. 하지만 이전 Unity 버전에서 이 플래그는 설정 가능한 조인트의 조인트 드라이브 강도 및 댐핑 설정을 무시하도록 잘못 사용되었습니다. 설정 가능한 조인트를 사용하는 Unity 5.3으로 프로젝트를 업그레이드하는 경우 사용자는 이런 설정이 과거에는 이전의 JointDriveMode 플래그로 인해 잘못 무시되어 영향을 미치지 않았지만 이제는 영향을 미칠 수 있다는 점에 유의해야 합니다.

레거시 광원 애니메이션

5.3에서는 기존 및 새로운 레거시 애니메이션이 Light 프로퍼티를 애니메이션화하지 않습니다. 광원의 기초 데이터 구조가 변경되어 광원이 레거시와 호환되지 않습니다. 광원을 올바르게 애니메이션화하려면 Animator 컴포넌트를 사용하십시오.=======

에디터 확장 프로그램

이제 씬을 저장할 때 씬의 더티 플래그가 유지됩니다. 더티 플래그를 올바르게 설정하지 않는 에디터 확장 프로그램은 데이터를 올바르게 저장하는 데 실패할 수 있습니다. Undo.RecordObject를 사용하여 오브젝트가 곧 변할 예정임을 기록하고 씬의 더티 플래그를 적절히 업데이트하거나, EditorSceneManager.MarkSceneDirty를 사용하여 전체 씬을 강제로 더티하다고 표시합니다.

카메라 뎁스 텍스처 셰이더 변수

_CameraDepthTexture 셰이더 변수는 이전처럼 카메라에서 렌더링된 마지막 뎁스 텍스처를 참조하지 않고 카메라의 기본 뎁스 텍스처를 일관되게 참조하도록 수정되었습니다. 예를 들어 해상도가 절반인 뎁스 퍼버를 얻기 위해 스크립트에서 보조 카메라를 렌더링하면서 뎁스 텍스처를 바인드해야 하는 경우 이제는 마지막으로 렌더링된 카메라의 뎁스 텍스처를 참조함을 의미하는 _LastCameraDepthTexture 변수를 사용해야 합니다.

ComputeBuffers

자동 변환된 OpenGL 셰이더의 ComputeBuffers 데이터 레이아웃이 DirectX ComputeBuffers의 레이아웃과 일치하도록 변경되었습니다. OpenGL에서 ComputeBuffer를 사용하는 경우 이전 OpenGL 레이아웃 규칙과 일치하도록 데이터를 미세 조정하는 코드를 제거해야 합니다. 자세한 내용은 컴퓨트 셰이더를 참조하십시오.

5.4 네트워킹 API 변경 사항(5.4 Networking API Changes)
Unity 5.2으로 업그레이드