Version: 2021.1
언어: 한국어
Unity 업그레이드
Unity 2021.1로 업그레이드

API 업데이터

사용성과 성능을 개선하기 위해 Unity는 클래스, 함수, 프로퍼티(API) 동작을 변경할 수 있습니다. 때에 따라 이러한 개선 사항으로 인해 Unity의 주요 버전을 다른 버전으로 이동할 때, 중대한 변경 사항을 야기할 수 있습니다.

중대한 변경 사항의 영향을 최소화하기 위해 API 업데이터는 스크립트와 어셈블리에서 사용되지 않는 코드를 식별하고 업데이트합니다.

API 업데이터는 ScriptUpdater와 AssemblyUpdater로 구성되어 있으며, 각각 소스 코드(스크립트)와 어셈블리(dll 파일)의 업데이트를 담당합니다.

참고: API 업데이터는 API의 특정 오류 및 경고만 수정할 수 있습니다. 콘솔 메시지에는 UnityUpgradable로 표시됩니다. API 업데이터에서 처리할 수 없는 다른 오류 또는 경고는 수동으로 해결해야 합니다.

API 업데이터 사용

스크립트 컴파일이 트리거되면 API 업데이터를 자동으로 실행합니다. 예를 들어 다음과 같은 경우에 발생합니다.

  • 프로젝트를 열 때
  • 패키지를 임포트할 때
  • 스크립트의 변경 사항을 저장할 때

API 업데이터는 사용되지 않는 코드를 감지하고 업데이트를 제공합니다. 사용자가 동의하면 API의 권장 업데이트 버전으로 사용되지 않는 코드를 다시 작성합니다.

예를 들어, API 업데이터는 사용되지 않는 다음과 같은 구문을

light.color = Color.red;

다음과 같이 전환합니다.

GetComponent<Light>().color = Color.red;

아래 단계에서는 Unity에서 스크립트 컴파일을 트리거할 때 API 업데이터의 워크플로를 설명합니다.

  1. Unity가 스크립트 컴파일을 트리거합니다.
  2. API 업데이터는 처리할 수 있는 컴파일러 오류 또는 경고를 업데이트할 수 있는지 확인합니다.
    • 오류나 경고를 찾지 못하면 프로세스를 종료합니다.
    • 오류나 경고가 발견되면 자동 업데이트를 제공하는 대화 상자가 표시됩니다.
      API 업데이터가 스크립트 또는 어셈블리를 업데이트하도록 하기 전에 에디터를 닫고 프로젝트를 백업합니다. 프로젝트를 다시 열면 Unity가 스크립트를 컴파일하고 API 업데이터를 트리거합니다.
  3. 업데이트를 동의하면 API 업데이터는 동일한 컴파일 단위의 모든 스크립트를 업데이트합니다.
  4. API 업데이터는 처리할 수 있는 오류나 경고가 더 이상 감지되지 않을 때까지 이 과정을 반복합니다.

The updater can run multiple times if scripts with obsolete code fall into different compilation passes, for example, editor scripts. When the API Updater successfully finishes, the console displays the message: Finished updating scripts / assemblies.

API 업데이터가 스크립트의 업데이트를 허용하지 않으면 콘솔에 스크립트 오류 또는 경고가 표시됩니다. API 업데이터가 업데이트할 수 있다는 오류 또는 경고 메시지(UnityUpgradable)가 표시됩니다.

스크립트에 API 업데이터가 성공적으로 실행되지 않는 다른 오류가 있는 경우 콘솔에 이를 알리는 메시지가 표시됩니다. API 업데이터가 업데이트를 완료하려면 먼저 이러한 오류를 해결해야 합니다.

API 업데이터 관련 커맨드 라인 인자

커맨드 라인에서 Unity를 배치 모드로 실행하는 경우 -accept-apiupdate 옵션을 사용하여 API 업데이터를 실행합니다. 자세한 내용은 커맨드 라인 인자를 참조하십시오.

로깅

API 업데이터는 어셈블리의 변경 사항을 에디터 로그에 기록합니다. 기록되는 정보의 양을 제어하려면 UNITY_APIPDATER_LOG_THRESHOLD 환경 변수를 원하는 로그 임계값으로 설정하고 Unity를 시작합니다. 예는 다음과 같습니다.

Windows:

c:> set UNITY_APIUPDATER_LOG_THRESHOLD=Debug
c:> \path\to\unity\Unity.exe

Linux의 경우:

$ export UNITY_APIUPDATER_LOG_THRESHOLD=Debug
$ /path/to/unity/Unity

Mac의 경우:

$ export UNITY_APIUPDATER_LOG_THRESHOLD=Debug
$ /path/to/unity/Unity

참고: 버전 관리를 이용하여 API 업데이터가 프로젝트의 스크립트에 적용한 변경 사항을 확인할 수도 있습니다.

AssemblyUpdater가 완료되면 Editor.log에 변경 사항이 표시됩니다. 예는 다음과 같습니다.

[AssemblyUpdater] Property access to 'UnityEngine.Rigidbody
UnityEngine.GameObject::get_rigidbody()' in 'System.Void
Test.ClassReferencingObsoleteUnityAPIThroughEditorAssembly::Run()' replaced with 'T
UnityEngine.GameObject::GetComponent<UnityEngine.Rigidbody>()'.

아래 표에서는 UNITY_APIUPDATER_LOG_THRESHOLD 환경 변수의 값을 설명합니다.

로그 임계값 설명
Error(기본값) API 업데이터는 Error 메시지만 기록합니다. 오류 메시지는 API 업데이터가 특정 업데이트를 적용하지 못할 때 발생하며, 이 경우 수정 조치를 취해야 합니다(대개 원본 어셈블리 작성자에게 업데이트된 버전의 어셈블리를 제공하도록 요청함).
Warning API 업데이터는 Warning, Error 메시지를 기록합니다. 사용자가 검토해야 할 수 있는 변경 사항을 API 업데이터가 적용할 때, 경고 메시지를 기록합니다.
Info API 업데이터가 Informational, Warning, Error 메시지만 기록합니다. 정보 메시지에는 API 업데이터에서 적용한 업데이트 내용을 포함합니다.
Debug API 업데이터는 모든 메시지를 기록합니다. 이 기록은 문제 해결에 유용합니다.예를 들면, Unity에 보고할 API 업데이터에 문제가 있는 경우가 있습니다.

문제 해결

API 업데이트에 실패했습니다. 이전 콘솔 메시지를 확인하십시오.

API 업데이터가 모든 사용되지 않는 코드를 업데이트할 수 없습니다. 이 문제는 업데이터가 변경 내용을 저장할 수 없을 때 발생할 수 있습니다. 예를 들면, 스크립트에 대한 사용자 권한이 읽기 전용인 경우가 있습니다.

콘솔에서 이전 라인을 확인하여 업데이트 프로세스에서 발생한 문제를 확인합니다.

  • 2018–07–31 페이지 수정됨

  • Unity 2017.2에서 “accept-apiupdate” 커맨드 라인 옵션 추가

  • Unity 2018.3에서 AssemblyUpdater 로그 기능이 향상됨 NewIn20183

Unity 업그레이드
Unity 2021.1로 업그레이드