Unity 2019.3 릴리스

프로그래머를 위한 새로운 기능 및 업데이트

DOTS 주요 업데이트, 개선된 버전 관리, 설정 가능한 플레이 모드 진입 옵션, 직렬화 개선, 물리 업데이트를 비롯해 Unity 2019.3에 새로 추가된 개발자를 위한 기능을 알아보세요.

새로운 기능

프로그래머 툴에 대한 주요 업데이트의 개요입니다. 자세한 내용은 릴리스 노트를 확인하세요.

DOTS 게임 코드 업데이트

DOTS 패키지의 새로운 버전을 사용하면 보일러 플레이트 코드를 작성할 필요성이 줄어듭니다. 커스텀 제작 컴포넌트를 간단한 [GenerateAuthoringComponent] 속성으로 교체하고, 이에 해당하는 IJobForEach 및 IJobForEachWithEntity의 상세 구성을 이제 버스트 컴파일러C# 잡 시스템을 사용하는 단순하고 빠른 Entities.ForEach()로 교체할 수 있습니다.

DOTS 코드를 새로운 방식으로 작성하려면 패키지 매니저에서 엔티티 패키지(프리뷰)를 설치하세요.

DOTS_game_code_update.cs (C#)
using System;
using System.Collections;
using System.Collections.Generic;
using Unity.Entities;
using Unity.Jobs;
using Unity.Sample.Core;
using Unity.Transforms;
using UnityEngine;
[GenerateAuthoringComponent]
struct Velocity : IComponentData
{
	public float value;
}
class ApplyVelocitySystem : JobComponentSystem
{
	protected override JobHandle OnUpdate(JobHandle inputDeps)
	{
		float deltaTime = Time.deltaTime;
		return Entities.ForEach((ref Translation translation, in Velocity velocity) =>
		{
			translation.Value += velocity.Value * deltaTime;
		}).Schedule(inputDeps);
	}
}
자세히 알아보기

직렬화 개선 사항

새로운 SerializeReference 속성을 사용하면 C# 클래스를 값 유형이 아닌 레퍼런스로 직렬화할 수 있습니다. 즉 서로를 참조하는 POCO(기존 플레인 C# 오브젝트)로 코드를 단순화하여 그래프 및 트리와 같은 복잡한 데이터 구조를 표현하고 관리할 수 있습니다.

또한 필드에 다형성 데이터가 포함될 수 있도록 지원을 제공합니다. 예를 들어 열거형인 List<IAnimal>은 개(class Dog : IAnimal{}) 및 고양이(class Cat : IAnimal{})를 포함할 수 있습니다.

레퍼런스로 직렬화 표시된 필드는 이제 기본적으로 null 값을 표현할 수 있습니다. 이전에 null 필드를 직렬화하는 작업에는 항상 해당 유형의 기본 생성자를 사용하여 역직렬화하는 작업이 수반되었습니다.

기존에 비Unity 유형의 직렬화는 다형성을 무시해왔습니다. Unity 2019.3에서는 다형성 직렬화를 통해 이전 직렬화 과정에서는 유지될 수 없었던 오브젝트 레퍼런스를 유지할 수 있고, 상속 체인을 더 정확하게 참조할 수 있습니다.

Serialization_improvements.cs (C#)
using System;
using System.Collections.Generic;
using UnityEngine;

public interface IShape {}
[Serializable]
public class Cube : IShape
{
    public Vector3 size;
}
[ExecuteInEditMode]
public class BuildingBlocks : MonoBehaviour
{
    [SerializeReference]
    public List<IShape> inventory;
   void OnEnable()
    {
        if (inventory == null)
        {
            inventory = new List<IShape>()
            {
                new Cube() {size = new Vector3(1.0f, 1.0f, 1.0f)}
            };
            Debug.Log("Created list");
        }
        else
            Debug.Log("Read list");
    }
}
자세히 알아보기

설정 가능한 플레이 모드 진입 옵션(실험 기능)을 통한 더 빠른 반복 작업

현재 에디터에서 플레이 모드 진입 시 Unity는 스크립팅 상태(도메인 다시 로드)를 재설정하고 씬을 다시 로드하는 두 가지 작업을 수행합니다. 이 작업은 시간을 필요로 하며, 프로젝트가 복잡해지는 경우 Unity 에디터가 플레이 모드에 진입하는 속도가 느려질 수 있습니다. 이러한 이유로 설정 가능한 플레이 모드 진입 옵션(실험 기능)을 도입했습니다(프로젝트 설정 > 에디터 > 플레이 모드 진입 옵션). 

이 옵션을 사용하면 코드 변경 사항이 없는 경우에 플레이 모드 진입 과정에서 도메인 또는 씬이 다시 로드되지 않도록 비활성화할 수 있습니다. 유니티의 테스트 결과에 따르면, 이렇게 설정을 변경하는 경우 프로젝트에 따라 반복 작업 시간을 50~90% 절약할 수 있습니다.

도메인을 다시 로드하지 않도록 비활성화한 경우, 스크립트를 수정하는 방법에 대한 자세한 내용은 기술 자료에서 플레이 모드를 설정하는 방법을 확인하세요.

플레이 모드에 진입하기 전에 게임 상태를 재설정하려는 경우 API 및 콜백을 통해 이 기능에 액세스할 수도 있습니다.

이 기능은 현재 실험 기능이며 포럼에 다양한 의견을 남겨주시기 바랍니다.

자세히 알아보기

v3.4에서 v4.1로 업그레이드된 PhysX 라이브러리

PhysX 라이브러리가 v3.4에서 v4.1로 업그레이드되었습니다. 여기에는 새로운 시간적 가우스-자이델 솔버(solver)가 포함되어 조인트의 과도한 움직임에 대한 저항성을 높이고, 이전에 시뮬레이션 과정에서 발생했던, 예상을 벗어난 동작을 방지할 수 있습니다. 새로운 솔버를 활성화하려면 프로젝트 설정 > 물리로 이동하세요. 

유니티에서는 월드 경계와 구획 개수를 자동으로 계산할 수 있는 새로운 광상 자동 상자 분할(Broad Phase Automatic Box Pruning) 알고리즘도 공개했습니다. 이 알고리즘은 기존 다중 상자 분할(Multi-Box Pruning) 알고리즘에서 업그레이드된 것입니다.

또한 더 빠른 메시 중간 단계 알고리즘을 데스크톱 플랫폼에서 사용할 수 있습니다. 이 알고리즘은 구축(R 트리)하는 데 리소스 집약적인 가속화 구조를 필요로 하지 않으며, MeshCollider 인스턴스화 시간이 단축되므로 런타임 시 생성되는 콘텐츠에 유용합니다.

또한 MeshCollider의 메시 베이킹을 지연시킬 수 있는 새로운 API가 추가되었습니다. 어드벤처 게임의 대화 씬과 같이 로딩 화면이나 전환 씬 배후에서 많은 계산이 이루어지는 메시 베이킹 과정을 숨길 수 있습니다. 이 API는 스레드 세이프(thread-safe)이므로 C# 잡 시스템을 통하는 경우 등 메인 스레드와 무관하게 함수를 호출하여 여러 메시를 동시에 베이크할 수 있습니다. 

자세한 내용은 NVIDIA의 PhysX 4.1 SDK 가이드에 있는 "PhysX SDK 3.4에서 4.0으로 마이그레이션하기" 섹션을 확인하세요.

자세히 알아보기

프로파일러 개선 사항: 설정 가능한 프레임 수

2019.3 이전 버전에서는 프로파일러 창을 통해 성능을 조사하는 경우, 한 번에 300개 프레임의 프로필 데이터를 확인할 수 있었습니다. 그렇다고 해서 항상 실제로 중요하다고 생각하는 프레임을 살펴볼 수 있는 충분한 시간이 주어지지는 않았습니다.

설정 가능한 프레임 수를 사용하면 캡처 창을 확장할 수 있습니다. 이제 환경 설정 창에서 프로파일러 창에 표시할 프레임 수(300~2000)를 설정할 수 있습니다.

자세히 알아보기

프로파일러 개선 사항: 플레이어에 대한 딥 프로파일(Deep Profile) 지원

이 업데이트를 통해 빌드 창에서 또는 BuildPlayer API를 사용하여 모든 플레이어에 대한 딥 프로파일링 지원을 활성화할 수 있습니다.

딥 프로파일링 지원을 통해 플레이어를 빌드하면 기존 C# 메서드 진입 및 종료 시 타임스탬프를 기록할 수 있습니다. 하지만 이러한 C# 계측에는 성능 오버헤드가 수반될 수 있으므로 플레이어별로 이를 토글할 수 있는 옵션이 추가되었습니다.

자세히 알아보기

프로파일러 개선 사항: 플레이어에 대한 관리형 할당 호출 스택 지원

관리형 할당 트래킹 및 분석은 Unity의 프로파일러에서 중요한 기능입니다.
연속적인 관리형 할당 작업은 가비지 컬렉션(GC)을 발생시키고, 다중 프레임 지연으로 인해 원활한 게임플레이에 지장을 줍니다. 할당이 발생하는 시점을 파악하는 것뿐만 아니라 코드 내에서 할당이 시작되는 지점 또한 Unity로 게임을 개발할 때 중요한 정보입니다.

2019.3에서는 플레이어에 대한 관리형 할당의 호출 스택이 도입되었습니다. 이를 통해 플레이어를 프로파일링하는 시점에 GC 할당이 들어오는 지점을 C# 함수에서 확인할 수 있습니다.

해당 옵션은 호출 스택 토글을 통해 활성화할 수 있습니다.

자세히 알아보기

버전 관리 개선 사항

Unity 2019.3에는 버전 관리 지원에 대한 대대적인 개선도 포함되어 있습니다.

이 개선 사항에는 UX 및 통합에 대한 여러 개선 사항과 Perforce 연결 해제 시 자동 재연결 시도와 같은 Perforce 통합에 대한 수정 사항이 포함됩니다.

이제 기타 개선 사항과 더불어 인스펙터 창 상단에 있는 버전 관리 바가 제공되어 추가, 잠금, 잠금 해제 및 제출과 같은 추가 작업을 수행할 수 있습니다.

또한 이제 인스펙터에서 확인 처리하지 않은 에셋을 마우스 오른쪽 버튼으로 클릭하여 비활성화된 인스펙터 필드 값을 복사할 수 있습니다.

모든 UI 개선 사항 및 수정 사항에 대한 자세한 내용은 릴리스 노트를 확인하세요.

릴리스 노트 확인하기

어드레서블(Addressables)

이번 릴리스에는 새로운 어드레서블 에셋 시스템(예: 어드레서블)이 포함되어 "주소"를 통해 에셋을 로드하는 손쉬운 방법을 제공하는 한편, 콘텐츠 팩 제작 및 배포를 단순화하여 에셋 관리 오버헤드도 처리할 수 있습니다. 즉, 팀에서는 어드레서블을 통해 복잡한 라이브 콘텐츠를 효율적으로 관리할 수 있습니다.

Get started

넷코드

DOTS 샘플에 사용되는 FPS 넷코드는 DOTS를 기반으로 구현되어 유사한 아키텍처를 사용한 네트워크 게임을 손쉽게 제작할 수 있습니다. FPS 넷코드에는 클라이언트측 예측, 권한 서버, 보간 및 지연 보상이 포함됩니다. 

팀 요한슨(Tim Johansson)의 유나이트 강연에서 FPS 넷코드에 대한 소개를 확인하세요.

자세히 알아보기

지금 Unity 2019.3 다운로드

위에 소개된 모든 기능 및 기타 기능을 오늘부터 바로 사용해보세요.

Unity에서는 최적의 웹사이트 경험을 제공하기 위해 쿠키를 사용합니다. 자세한 내용은 쿠키 정책 페이지를 참조하세요.

확인