Version: 2019.1
패키지 매니페스트 창
패키지 에셋에 액세스

패키지용 스크립팅 API

패키지 관리자 스크립팅 API를 사용하여 패키지 관리자와 프로그래밍 방식으로 상호작용할 수 있습니다. 예를 들어 타겟 컴퓨터의 플랫폼에 따라 특정 패키지나 버전을 설치해야 할 수 있습니다.

이 시스템의 핵심은 PackageManager.Client 클래스입니다. 이 클래스를 이용하면 스크립팅을 통해 패키지를 찾고, 패키지 리스트를 탐색하고, 패키지를 설치하거나 제거할 수 있습니다.

또 다른 주요 클래스로는 PackageManager.PackageInfo가 있습니다. 이 클래스에는 패키지 매니페스트와 레지스트리에서 획득한 메타데이터 등과 같은 패키지 상태가 들어 있습니다. 예를 들어 패키지에 이용 가능한 버전 리스트 또는 패키지를 찾거나 설치할 때 발생하는 오류 리스트를 가져올 수 있습니다.

프로젝트에 패키지 추가

이 예제에서는 Client 클래스를 사용하여 프로젝트에 패키지를 설치하거나 추가하는 방법을 설명합니다.

Client.Add 메서드를 호출할 때 패키지 이름 또는 특정 버전의 이름을 지정할 수 있습니다. 예를 들어 Client.Add("com.unity.textmeshpro@1.3.0")를 사용하면 TextMesh Pro 패키지 1.3.0 버전을 설치하지만, Client.Add("com.unity.textmeshpro")만 사용하면 해당 패키지의 최신 버전을 설치하거나 최신 버전으로 업데이트합니다.

Client.Add 메서드는 AddRequest 인스턴스를 반환합니다. 이 인스턴스를 사용하면 상태, 오류, 또는 패키지에 새로 추가된 PackageInfo 정보가 들어 있는 요청 리스폰스를 가져올 수 있습니다.

using System;
using UnityEditor;
using UnityEditor.PackageManager.Requests;
using UnityEditor.PackageManager;
using UnityEngine;

namespace Unity.Editor.Example {
   static class AddPackageExample
   {
       static AddRequest Request;
      
       [MenuItem("Window/Add Package Example")]
       static void Add()
       {
           // Add a package to the Project
           Request = Client.Add("com.unity.textmeshpro");
           EditorApplication.update += Progress;
       }

       static void Progress()
       {
           if (Request.IsCompleted)
           {
               if (Request.Status == StatusCode.Success)
                   Debug.Log("Installed: " + Request.Result.packageId);
               else if (Request.Status >= StatusCode.Failure)
                   Debug.Log(Request.Error.message);

               EditorApplication.update -= Progress;
           }
       }
   }
}

프로젝트에서 패키지 리스트 탐색

이 예제에서는 Client 클래스를 사용하여 프로젝트에서 패키지에 대해 반복 작업을 수행하는 방법을 설명합니다.

Client.List 메서드는 ListRequest 인스턴스를 반환합니다. 이 인스턴스를 사용하면 List 작업 상태, 오류, 또는 반복할 수 있는 PackageCollection이 들어 있는 요청 리스폰스를 가져올 수 있습니다.

using System;
using UnityEditor;
using UnityEditor.PackageManager.Requests;
using UnityEditor.PackageManager;
using UnityEngine;

namespace Unity.Editor.Example {
   static class ListPackageExample
   {
       static ListRequest Request;
    
       [MenuItem("Window/List Package Example")]
       static void List()
       {
           Request = Client.List();    // List packages installed for the Project
           EditorApplication.update += Progress;
       }

       static void Progress()
       {
           if (Request.IsCompleted)
           {
               if (Request.Status == StatusCode.Success)
                   foreach (var package in Request.Result)
                       Debug.Log("Package name: " + package.name);
               else if (Request.Status >= StatusCode.Failure)
                   Debug.Log(Request.Error.message);

               EditorApplication.update -= Progress;
           }
       }
   }
}
패키지 매니페스트 창
패키지 에셋에 액세스