W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
您可以使用 Package Manager 腳本 API 以編程方式與 Package Manager 進(jìn)行交互。例如,可能需要根據(jù)目標(biāo)機(jī)器的平臺(tái)來(lái)安裝特定的包或版本。
系統(tǒng)的核心是 PackageManager.Client 類,可使用該類來(lái)查找包、瀏覽包列表以及通過(guò)腳本安裝和卸載包。
另一個(gè)重要的類是 PackageManager.PackageInfo,其中包含包的狀態(tài),包括從包清單和注冊(cè)表獲取的元數(shù)據(jù)。例如,可獲取適用于包的版本列表,或者獲取在查找或安裝包時(shí)可能發(fā)生的所有錯(cuò)誤的列表。
以下示例演示了如何使用 Client 類來(lái)安裝包或者將包添加到項(xiàng)目中。
在調(diào)用 Client.Add 方法時(shí),您可以指定包名稱或具有特定版本的名稱。例如,如果使用 Client.Add("com.unity.textmeshpro@1.3.0")
,則會(huì)安裝 TextMesh Pro 包版本 1.3.0,但如果僅使用 Client.Add("com.unity.textmeshpro")
,則會(huì)安裝(或更新到)該包的最新版本。
Client.Add 方法將返回 AddRequest 實(shí)例,可以用來(lái)獲取狀態(tài)、任何錯(cuò)誤或 Request 響應(yīng)(包含新添加的包的 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()
{
// 將包添加到項(xiàng)目
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 類來(lái)遍歷項(xiàng)目中的包。
Client.List 方法將返回 ListRequest 實(shí)例,可以用來(lái)獲取 List 操作的狀態(tài)、任何錯(cuò)誤或者 Request 響應(yīng)(包含您可以遍歷的 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(); // 列出已為項(xiàng)目安裝的包
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;
}
}
}
}
以下示例演示了如何使用 Client 類來(lái)嵌入您的項(xiàng)目中已經(jīng)安裝的某個(gè)包。主方法是 Client.Embed 方法,可生成包的副本并存儲(chǔ)在項(xiàng)目的 Packages
文件夾下面。
Client.Embed 方法將返回 EmbedRequest 實(shí)例,可以用來(lái)獲取 Embed 操作的狀態(tài)、任何錯(cuò)誤或 Request 響應(yīng)(包含新嵌入的包的 PackageInfo 信息)。
此示例還使用 Client.List 方法來(lái)訪問(wèn)項(xiàng)目中當(dāng)前安裝的包的集合,并選擇第一個(gè)既不是嵌入式包也不是內(nèi)置包的包。
Client.List 方法將返回 ListRequest 實(shí)例,可以用來(lái)獲取 List 操作的狀態(tài)、任何錯(cuò)誤或者 Request 響應(yīng)(包含您可以遍歷的 PackageCollection)。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.PackageManager.Requests;
using UnityEditor.PackageManager;
using UnityEngine;
namespace Unity.Editor.Example
{
static class EmbedPackageExample
{
static String targetPackage;
static EmbedRequest Request;
static ListRequest LRequest;
[MenuItem("Window/Embed Package Example")]
static void GetPackageName()
{
// 首先獲取一個(gè)已安裝的包的名稱
LRequest = Client.List();
EditorApplication.update += LProgress;
}
static void LProgress()
{
if (LRequest.IsCompleted)
{
if (LRequest.Status == StatusCode.Success)
{
foreach (var package in LRequest.Result)
{
// 僅獲取項(xiàng)目中當(dāng)前安裝的包
//(既不是內(nèi)置的包也不是已嵌入的包)
if (package.isDirectDependency && package.source
!= PackageSource.BuiltIn && package.source
!= PackageSource.Embedded)
{
targetPackage = package.name;
break;
}
}
}
else
Debug.Log(LRequest.Error.message);
EditorApplication.update -= LProgress;
Embed(targetPackage);
}
}
static void Embed(string inTarget)
{
// 將包嵌入項(xiàng)目中
Debug.Log("Embed('" + inTarget + "') called");
Request = Client.Embed(inTarget);
EditorApplication.update += Progress;
}
static void Progress()
{
if (Request.IsCompleted)
{
if (Request.Status == StatusCode.Success)
Debug.Log("Embedded: " + Request.Result.packageId);
else if (Request.Status >= StatusCode.Failure)
Debug.Log(Request.Error.message);
EditorApplication.update -= Progress;
}
}
}
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: