代码控制 PackageManager核心:
可以控制某个包的安装和卸载
UnityEditor.PackageManager.ClientAPI: Client.List();//列出安装的包信息
Client.Remove(packageName)//移除指定名字的包····
Example:
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.PackageManager.Requests;
using UnityEditor.PackageManager;
using UnityEngine;
public class PackagesListener
{
public static ListRequest Request { get; private set; }
public static List<string> DeleteList { get; set; } = new List<string>()
{
"com.unity.timeline",
};
public static Queue<RemoveRequest> removeRequests = new Queue<RemoveRequest>();
[UnityEditor.Callbacks.DidReloadScripts]
static void CheckPackages()
{
Debug.LogError("CheckPackages");
Request = Client.List(); // List packages installed for the project
EditorApplication.update += Progress;
}
static void Progress()
{
if (Request.IsCompleted == false)
return;
EditorApplication.update -= Progress;
if (Request.Status != StatusCode.Success)
{
Debug.LogError(Request.Error.message);
return;
}
List<string> waitForDeleteList = new List<string>();
foreach (var deleteItemName in DeleteList)
{
foreach (var package in Request.Result)
{
if (package.name == deleteItemName)
{
waitForDeleteList.Add(deleteItemName);
break;
}
}
}
removeRequests.Clear();
foreach (var item in waitForDeleteList)
{
removeRequests.Enqueue(Client.Remove(item));
}
}
}