이 페이지에는 2023.1 버전에서 2023.2로 업그레이드할 때 기존 프로젝트에 영향을 줄 수 있는 Unity 2023.2 버전의 변경 사항이 나열되어 있습니다.
Unity의 프로그레시브 라이트매퍼는 더 이상 기본적으로 앰비언트 프로브와 스카이박스 반사 프로브를 베이크하지 않으며, Lighting 창의 Recalculate Environment Lighting 설정이 제거되었습니다.
씬이 환경 조명 없이 새로 생성되는 것을 방지하기 위해 Unity는 기본 스카이박스 머티리얼과 일치하는 환경 조명을 포함하는 기본 Lighting Data Asset을 할당합니다.
다음과 같은 경우에는 Lighting 창에서 Generate Lighting을 선택해야 합니다.
이전의 자동 베이킹 동작에 의존하지만 기본 환경 조명 설정을 사용하는 경우 Unity는 기본 조명 데이터 에셋을 사용하도록 씬을 업그레이드합니다.
Lighting 창의 Auto Generate 설정이 제거되었으며 관련 API는 더 이상 사용되지 않습니다.
씬에 베이크된 조명을 생성하려면 다음 중 하나를 수행하십시오.
Lightmapping.Bake API를 사용합니다.Lightmapping.BakeAsync API를 사용합니다.편집하는 동안 라이트맵을 확인하려면 이제 Scene View Draw Mode를 선택하고 Lighting Data를 Preview로 설정할 수 있습니다. 이는 베이크된 조명의 미리 보기를 표시합니다. 미리 보기 라이트맵은 비파괴적이며, 씬을 베이크한 후에 사용할 수 있습니다.
씬이 자동 생성된 조명에 의존하는 경우 더 이상 베이크된 조명이 없습니다. Lighting 창에서 Generate Lighting을 선택하여 조명을 수동으로 다시 베이크합니다.
스크립트를 사용하여 씬을 열면 이제 자동 생성 조명이 완료될 때까지 기다리는 대신 Lightmapping.Bake 또는 Lightmapping.BakeAsync를 사용해야 합니다.
2022.1에서 지원이 중단된 다음 그래픽스 포맷은 더 이상 사용되지 않으며, 사용 시 컴파일 오류가 발생합니다.
GraphicsFormat.DepthAutoGraphicsFormat.ShadowAutoGraphicsFormat.VideoAutoGraphicsFormatUtility.GetGraphicsFormat API는 더 이상 사용되지 않는 포맷을 반환하지 않습니다. 대신 다음 작업을 수행합니다.
GraphicsFormat.DepthAuto 대신 RenderTextureFormat.Depth를 GraphicsFormat.None으로 변환합니다. GraphicsFormat.None은 뎁스 전용 렌더링을 나타냅니다.GraphicsFormat.ShadowAuto 대신 RenderTextureFormat.Shadowmap을 GraphicsFormat.None으로 변환합니다. GraphicsFormat.None 포맷으로 렌더 텍스처를 생성하는 경우 RenderTextureDescriptor.shadowSamplingMode를 ShadowSamplingMode.CompareDepths로 설정하여 뎁스 비교 샘플링을 활성화해야 합니다.
GraphicsFormat.DepthAuto와 GraphicsFormat.ShadowAuto 모두 뎁스 스텐실 포맷으로 간주되었지만 컬러 포맷으로 사용되므로 코드를 조정해야 할 수 있습니다.
예를 들어 다음 스니핏에서 GraphicsFormatUtility.IsDepthFormat은 true 대신 false를 반환합니다.
RenderTextureDescriptor desc = new RenderTextureDescriptor(256, 256, RenderTextureFormat.Depth, 32);
bool isDepthOnly = GraphicsFormatUtility.IsDepthFormat(desc.graphicsFormat);
RenderTexture 또는 RenderTextureDescriptor가 뎁스 전용인지 확인하려면 다음 중 하나를 사용하십시오.
if (renderTexture.graphicsFormat == GraphicsFormat.None && renderTexture.depthStencilFormat != GraphicsFormat.None)if (renderTexture.format == RenderTextureFormat.Depth || renderTexture.format == RenderTextureFormat.Shadowmap)
런타임 시 생성된 2D 텍스처는 기본적으로 더 이상 밉맵 업로드 제한이 없습니다. 이전에는 밉맵 제한을 Texture2D 생성자(생성자가 TextureFormat으로 호출될 때 ignoreMipmapLimit 부울 파라미터를 제공하거나, GraphicsFormat으로 호출될 때 IgnoreMipmapLimit TextureCreationFlag를 제공)를 통해 명시적으로 비활성화해야 했거나, 구성된 텍스처의 tex.ignoreMipmapLimit을 토글해야 했습니다. 이 동작이 변경되어, 이제 런타임 시 생성된 2D 텍스처에 밉맵 제한이 옵트인됩니다.
프로젝트를 변경하지 않으면 다음과 같은 경우 GPU 대역폭 및 메모리 최적화를 놓치며, 텍스처가 현재 최대 해상도로 업로드되기 때문에 의도한 것보다 품질이 향상될 수 있습니다.
다음과 같은 경우 사용자는 이 변경 사항의 영향을 받지 않습니다.
ignoreMipmapLimit은 false)tex.ignoreMipmapLimit을 false로 설정지원이 중단된 생성자를 사용하는 경우 스크립트를 업그레이드해야 할 수 있습니다.
스크립트를 업그레이드하려면 MipmapLimitDescriptor가 있는 Texture2D 생성자를 사용하여 런타임 텍스처가 품질 설정의 영향을 받아야 함을 표시합니다.
이 변경 사항은 Texture2DArrays에 대한 새로운 밉맵 제한 지원과 일치하도록 적용되었습니다. 각 텍스처 셰이프가 고유한 기본 밉맵 제한 동작을 정의하도록 하는 대신, 일관성을 선택하고 런타임 텍스처에서 밉맵 제한을 명시적으로 활성화해야 하는 것으로 결정되었습니다. 이러한 옵트인 동작이 옵트아웃 동작보다 선호됩니다. 예상보다 적은 밉을 예기치 않게 업로드하는 것이 많은 밉을 예기치 않게 업로드하는 것보다 더 유해한 방식으로 런타임 텍스처가 다양하게 사용되기 때문입니다.
UI 툴킷의 UXML로 커스텀 컨트롤 생성을 간소화하여 워크플로 속도를 높이고 직관성을 높였습니다.
주요 개선 사항으로 UxmlElement 및 UxmlAttribute 속성이 도입되었습니다. 이러한 속성을 사용하면 속성 저작(authoring)을 간소화하고 속성 이름을 프로퍼티 이름에서 자동으로 파생하여 UxmlTraits 및 UxmlFactory 클래스가 필요하지 않습니다.
이제 특정 데이터 유형에 대한 커스텀 속성 컨버터를 생성하여 UXML 속성 문자열에서 값을 원활하게 전환할 수 있습니다. 또한 UxmlObject를 개선하여 비시각적인 커스텀 요소를 시각적 요소 내에서 정의할 수 있도록 했습니다. 새로운 시스템은 Unity 직렬화를 활용하고 소스 제너레이터를 사용하여 각 커스텀 요소 클래스의 모든 UxmlAttribute 정의 요소에 대한 UxmlSerializedData 클래스를 생성해서 커스텀 프로퍼티 드로어, 데코레이터 및 다양한 속성을 지원합니다.
‘속성 오버라이드’를 도입하면 UXML 속성의 동작을 커스터마이즈할 수 있으며 상속된 속성으로 작업할 때 유연성을 제공합니다. 이러한 개선 사항은 Unity 2023.2 이상에서 복잡한__ UI__(사용자 인터페이스) 사용자가 애플리케이션과 상호 작용하도록 해 줍니다. Unity는 현재 3개의 UI 시스템을 지원합니다. 자세한 정보
See in Glossary 요소를 만들 때 더욱 효율적이고 사용자 친화적인 경험을 제공합니다.
예를 들어 다음 코드 샘플은 UxmlFactory 및 UxmlTraits로 생성된 커스텀 컨트롤입니다.
public class HealthBar : VisualElement
{
private const float k_LowValue = 0;
private const float k_HighValue = 100;
// Declare as usable with Uxml
public new class UxmlFactory : UxmlFactory<HealthBar, UxmlTraits> { }
// Define attributes (and connect with class properties) for Uxml
public new class UxmlTraits : BindableElement.UxmlTraits
{
UxmlColorAttributeDescription m_Color = new UxmlColorAttributeDescription { name = "color", defaultValue = Color.white };
UxmlFloatAttributeDescription m_Value = new UxmlFloatAttributeDescription { name = "value", defaultValue = k_HighValue };
public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc)
{
base.Init(ve, bag, cc);
var bar = ve as HealthBar;
bar.color = m_Color.GetValueFromBag(bag, cc);
bar.value = m_Value.GetValueFromBag(bag, cc);
}
}
public Color color { get; set; }
[Range(k_LowValue, k_HighValue)]
public float value { get; set; }
}
다음 코드 샘플은 이전 코드 샘플과 동일한 작업을 수행하지만 새로운 UxmlElement 및 UxmlAttributes 시스템을 사용합니다.
[UxmlElement]
public class HealthBar2 : VisualElement
{
private const float k_LowValue = 0;
private const float k_HighValue = 100;
[UxmlAttribute]
public Color color { get; set; } = Color.white;
[UxmlAttribute]
[Range(k_LowValue, k_HighValue)]
public float value { get; set; } = k_HighValue;
}
더 많은 예시와 정보는 Unity UI 툴킷 기술 자료를 참조하고 가을에 발표될 자세한 블로그 게시물을 기다려 주십시오.
Assets/Create 메뉴가 재구성 및 분류되었습니다. 이 점검의 일부로 Unity 빌트인 ScriptTemplate 파일의 이름이 변경되었습니다.
CreateAssetMenuAttribute``, MenuItemAt tribute 또는 커스텀 ScriptTemplate을 사용하여 Assets/Create 메뉴에 요소를 추가한 사용자는 다른 요소에 대한 위치가 다르므로 메뉴 항목의 우선 순위를 변경해야 할 수 있습니다.
EditorApplication.ExecuteMenuItem API로 메뉴 항목을 실행하여 에셋을 생성하는 사용자는 메뉴 항목의 새 경로를 확인해야 합니다.
이전에 Unity 빌트인 ScriptTemplates를 오버라이드한 사용자는 오버라이드 파일의 이름을 업데이트하여 빌트인 템플릿의 새로운 이름과 일치하도록 해야 합니다.
ExecuteDefaultAction 및 ExecuteDefaultActionAtTarget 메서드는 지원이 중단되었습니다. 다음 메서드가 추가되어 이를 대체합니다.
HandleEventTrickleDownHandleEventBubbleUpUnity는 해당 요소의 TrickleDown 직후 및 BubbleUp 콜백 직전에 이벤트 디스패치 경로의 각 요소에 이러한 새로운 메서드를 실행합니다. 이러한 메서드 중 디스패치 단계는 그에 따라 TrickleDown 또는 BubbleUp으로 설정되고 이벤트의 `currentTarget``은 메서드를 실행하는 요소와 일치합니다.
AtTarget 디스패치 단계와 PreventDefault 메서드는 지원이 중단되었습니다. 이제 StopPropagation 또는 StopPropagationImmediately 호출은 TrickleDown 및 BubbleUp`` 콜백의 추가 호출을 중지하는 동시에 추가HandleEventTrickleDown및HandleEventBubbleUp` 실행을 중지합니다.
대부분의 경우 새 메서드로 업그레이드하지 않으려면 코드가 동작을 크게 변경하지 않아야 합니다. UI 툴킷은 여전히 사용되지 않는 메서드를 이전과 동일한 순서로 또는 최소한의 조정으로 호출합니다. 하지만 UI 툴킷 내의 모든 표준 컨트롤은 새로운 메서드를 사용하도록 마이그레이션되어 로직 실행 순서를 그에 맞게 조정했습니다. 업그레이드된 컨트롤을 사용하여 사용되지 않는 메서드에 대한 호출을 혼합하면 이전 Unity 버전에 비해 일부 로직이 동기화되지 않을 수 있습니다.
기존 코드를 새 메서드로 업그레이드하려면 다음 단계를 따르십시오.
ExecuteDefaultAction 및 ExecuteDefaultActionAtTarget을 HandleEventBubbleUp으로 대체하고 PreventDefault를 StopPropagation으로 대체합니다. 또는 동일한 코드 블록에서 StopPropagation이 이미 호출된 경우 PreventDefault 호출을 제거합니다. 이는 대부분의 경우에 해당됩니다.BubbleUp 콜백 중에 PreventDefault를 호출하는 문제가 발생하면(더 이상 진행이 불가능하고 StopPropagation으로 대체할 수 없음) TrickleDown 단계에서 콜백을 추가하여 StopPropagation을 호출하는 것이 좋습니다. 보통 이 단계는 이러한 시나리오를 해결하기에 충분합니다.