Package Manager のスクリプティング API を使用して、プログラムを通して Package Manager を操作できます。例えば、ターゲットマシンのプラットフォームに応じて、特定のパッケージやバージョンをインストールしたい場合があります。
システムの中核となるのは、PackageManager.Client クラスです。これを使うと、パッケージの検索、パッケージのリストの参照、スクリプトによるパッケージのインストールとアンインストールをスクリプト経由で行えます。
もう 1 つの重要なクラスは PackageManager.PackageInfo です。これには、パッケージマニフェストとレジストリから取得したメタデータを含む、パッケージの状態が含まれます。例えば、パッケージで使用可能なバージョンのリストや、パッケージの検索やインストール中に発生する可能性があるエラーリストを取得できます。
This example demonstrates how to use the Client class to install or add a package to the Project.
Client.Add メソッドを呼び出すときに、 パッケージ名、または特定のバージョン付きの名前を指定できます。例えば、 Client.Add("com.unity.textmeshpro@1.3.0")
は、TextMesh Pro パッケージのバージョン 1.3.0 をインストールし、Client.Add("com.unity.textmeshpro")
のみを使用するとパッケージの最新バージョンをインストール (または、最新バージョンに更新) します。
Client.Add メソッドは AddRequest インスタンスを返します。これを利用して、状態やエラーを把握できます。また、新しく加えられたパッケージの PackageInfo 情報を含む Request レスポンスを取得できます。
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;
}
}
}
}
This example demonstrates how to use the Client class to iterate over the packages in the Project.
Client.List メソッドは ListRequest インスタンスを返します。これを利用して、List オペレーションやエラーの状態を把握できます。また、繰り返し使うパッケージの PackageInfo 情報を含む Request レスポンスを取得できます。
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;
}
}
}
}